Структуры какао и NSMutableArray

У меня есть 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);
}
16
задан Circle 1 June 2010 в 02:32
поделиться

3 ответа

Как уже упоминалось, NSValue может обернуть простую структуру, используя + value: withObjCType: или -initWithBytes: objCType: :

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

// extract:
struct Point p;
[[array objectAtIndex:i] getValue:&p];

См. Руководство по количеству и значению для получения дополнительных примеров.

45
ответ дан 30 November 2019 в 15:40
поделиться

Можно использовать NSValue, или в некоторых случаях имеет смысл использовать словарь вместо struct.

2
ответ дан 30 November 2019 в 15:40
поделиться

Вы получаете ошибки, потому что NSMutableArray может принимать только ссылки на объекты, поэтому вам следует обернуть ваши структуры в класс:

@interface PointClass {
     struct Point p;
}

@property (nonatomic, assign) struct Point p;

Таким образом, вы можете передавать экземпляры PointClass.

Edit: Как упоминалось выше и ниже, NSValue уже предоставляет это более общим способом, поэтому вам следует использовать его.

3
ответ дан 30 November 2019 в 15:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: