Cocoa结构和NSMutableArray

时间:2010-06-01 02:32:40

标签: cocoa nsmutablearray struct

我有一个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);
}

3 个答案:

答案 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,或者在某些情况下使用字典而不是结构可能是有意义的。