我有一个NSMutableArray,我正在尝试存储和访问一些结构。我该怎么做呢? 'addObject'给我一个错误,说“addObject的参数1的不兼容类型”。这是一个例子('in'是NSFileHandle,'array'是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);
}
答案 0 :(得分:45)
如上所述,NSValue
可以使用+value:withObjCType:
或-initWithBytes:objCType:
包装普通结构:
// add:
[array addObject:[NSValue value:&p withObjCType:@encode(struct Point)]];
// extract:
struct Point p;
[[array objectAtIndex:i] getValue:&p];
有关更多示例,请参阅Number and Value guide。
答案 1 :(得分:3)
您收到错误,因为NSMutableArray
只能接受对象的引用,所以您应该将结构包装在一个类中:
@interface PointClass {
struct Point p;
}
@property (nonatomic, assign) struct Point p;
这样,您可以传入PointClass
。
修改:如上文及下文所述,NSValue已经以更通用的方式提供此功能,因此您应该使用它。
答案 2 :(得分:2)
你可以使用NSValue,或者在某些情况下使用字典而不是结构可能是有意义的。