iPhone Obj-C - получить пользовательский объект из NSMutableArray - PullRequest
2 голосов
/ 25 марта 2011

Имея:

@interface MyClass : NSObject {
    NSString *name; // retained and synthesized
    NSString *address; // retained and synthesized
} 

Я создаю массив:

NSMutableArray *myArray; // retained and synthesized

Заполняю его несколькими объектами MyClass:

MyClass *kat = [MyClass new];
kat.name = @"somestring";
kat.address = @"someotherstring"
[myArray addObject:kat];
[kat release];

Как получитьобъект по какому-то индексу?Приведенный ниже код дает мне нулевое значение, но оно должно иллюстрировать то, что мне нужно ..

MyClass *obj = (MyClass*)[myArray objectAtIndex:5];
NSLog(@"Selected: %@", obj.address); // = null :(

Что-то не так с кастингом или я о чем-то забываю?

Ответы [ 2 ]

6 голосов
/ 25 марта 2011
MyClass *obj = (MyClass*)[myArray objectAtIndex:5];
NSLog(@"Selected: %@", obj.address); // = null :(

Если этот код печатает (null), он не может быть, потому что массив пуст или objectAtIndex: не удалось. objectAtIndex: сгенерирует исключение диапазона, если вы попытаетесь получить доступ к индексу, превышающему количество объектов в массиве, и массив не может содержать "дыры" или нулевые ссылки.

Единственный способ, которым код будет выполняться без инцидентов, это если:

  • myArray - ноль; Вы не выделяли и / или не назначали экземпляр массива для myArray.

  • obj.address возвращает ноль; вы неправильно инициализировали экземпляр (что, по-видимому, вы сделали).

3 голосов
/ 25 марта 2011

Недостаточно просто объявить myArray в паре @ property / @ syntheize.Вам нужно, чтобы myArray был не нулевым.Вам нужно добавить myArray = [[NSMutableArray alloc] init]; где-то выше вашего [addObject:] вызова.

Кроме того, поскольку вы объявили переменную "myArray" как retain, если вы установите другой (не ноль) массив для myArray через self.myArray = otherArray myArray будет ненулевым, будет сохранен и готов к приему объектов.

Также, если вы выделяете myArray, не забудьте освободить его в методе dealloc вашего класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...