Cocoa structs和NSMutableArray?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (27)

我有一个NSMutableArray,我试图存储和访问一些结构。我该怎么做呢?'addObject'给了我一个错误,说"Incompatible type for argument 1 of addObject"。这里是一个例子('in'是一个NSFileHandle,'数组'是NSMutableArray):

//Write points
for(int i=0; i<5; i++) {
    struct Point p;
    buff = [in readDataOfLength:1];
    [buff getBytes:&(p.x) length:sizeof(p.x)];
    [array addObject:p];
}

//Read points
for(int i=0; i<5; i++) {
    struct Point p = [array objectAtIndex:i];
    NSLog(@"%i", p.x);
}
提问于
用户回答回答于

可以使用+value:withObjCType:-initWithBytes:objCType::

// add:
[array addObject:[NSValue value:&p withObjCType:@encode(struct Point)]];

// extract:
struct Point p;
[[array objectAtIndex:i] getValue:&p];
用户回答回答于

你得到的错误是因为NSMutableArray只能接受对象的引用,所以你应该把你的结构包装在一个类中:

@interface PointClass {
     struct Point p;
}

@property (nonatomic, assign) struct Point p;

这样,你可以传入实例PointClass

扫码关注云+社区

领取腾讯云代金券