У меня есть NSMutableArray, что я пытаюсь сохранить и получить доступ к некоторым структурам. Как я делаю это? 'addObject' дает мне ошибку при высказывании "Несовместимого типа для аргумента 1 из addObject". Вот пример ('в', 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);
}
Как уже упоминалось, NSValue
может обернуть простую структуру, используя + value: withObjCType:
или -initWithBytes: objCType:
:
// add:
[array addObject:[NSValue value:&p withObjCType:@encode(struct Point)]];
// extract:
struct Point p;
[[array objectAtIndex:i] getValue:&p];
См. Руководство по количеству и значению для получения дополнительных примеров.
Можно использовать NSValue, или в некоторых случаях имеет смысл использовать словарь вместо struct.
Вы получаете ошибки, потому что NSMutableArray
может принимать только ссылки на объекты, поэтому вам следует обернуть ваши структуры в класс:
@interface PointClass {
struct Point p;
}
@property (nonatomic, assign) struct Point p;
Таким образом, вы можете передавать экземпляры PointClass
.
Edit: Как упоминалось выше и ниже, NSValue уже предоставляет это более общим способом, поэтому вам следует использовать его.