Ответ 1
Вы не можете добавить nil, когда вы вызываете addObject
.
NSArray *array = [[NSArray alloc] initWithObjects:@"ΕΛΤΑ",
@"ΕΛΤΑ COURIER", @"ACS", @"ACS ΕΞΩΤΕΡΙΚΟ",
@"DHL", @"INTERATTICA", @"SPEEDEX",
@"UPS", @"ΓΕΝΙΚΗ ΤΑΧΥΔΡΟΜΙΚΗ", @"ΜΕΤΑΦΟΡΙΚΕΣ ΕΞΩΤΕΡΙΚΟΥ", nil];
Это работает, потому что в конце имеет нуль.
Но я добавляю такие объекты: addObject:name
и т.д....
Поэтому в конце я должен добавить nil, я делаю это addObhect: ноль, но когда я запускаю приложение, он все равно падает с cellForRowAtIndexPath:
как я могу это сделать?
Хорошо, мне не нужно добавлять nil
В чем причина того, что мое приложение сработает?
Вы не можете добавить nil, когда вы вызываете addObject
.
Если вы должны добавить объект nil
в коллекцию, используйте класс NSNull
:
Класс NSNull определяет одноэлементный объект, используемый для представления нулевых значений в объектах коллекции (которые не допускают значений nil).
Предполагая, что "массив" имеет тип NSMutableArray:
....
[array addObject:[NSNumber numberWithInt:2];
[array addObject:@"string"];
[array addObject:[NSNull null]];
Вам не нужно вызывать [addObject:nil]
nil
в initWithObjects:
только там, чтобы сообщить метод, в котором заканчивается список, из-за того, как работает C varargs
. Когда вы добавляете объекты один за другим с помощью addObject:
, вам не нужно добавлять нуль.
Если вам действительно нужен элемент Null-ish в вашей коллекции, NSNull существует для этого.
nil используется для завершения массива
nil
не является объектом, который можно добавить в массив: массив не может содержать nil
. Вот почему addObject:nil
падает.
Вам нужно добавить NSNull
, и лучший способ сделать это:
NSArray *array = @[ @"string", @42, [NSNull null] ];
Я лично рекомендую использовать определенное значение, например 0
вместо нулевого или нулевого в вашем дизайне вашего кода, но иногда вам нужно добавить null.
Существует хорошее объяснение эта ссылка Apple.
Вы не можете добавить объект к NSArray
, потому что этот класс неизменен. Вы должны использовать NSMutableArray
, если хотите изменить массив после его создания.
передайте свой объект с помощью этого метода при добавлении в массив, чтобы избежать попытки вставить nil-объект из объектов.
-(id) returnNullIfNil:(id) obj {
return (obj == nil) ? ([NSNull null]) : (obj);
}
[NSNull null] возвращает нулевой объект, который представляет nil.