iphone - mutableArray не может хранить ноль объектов - PullRequest
3 голосов
/ 07 апреля 2010

У меня есть изменяемый массив, который сохраняется и хранит несколько объектов.В какой-то момент один объект может стать нулевым.Когда это происходит, приложение вылетает, потому что массивы не могут иметь нулевые объекты.Представьте себе что-то вроде

[объект1, объект2, объект3, ноль];

затем, объект2 = ноль

[объект1, ноль, объект3, ноль];

это невозможно, потому что nil - это конец маркера массива.Итак, как я могу решить это?спасибо за любую помощь.

1 Ответ

9 голосов
/ 07 апреля 2010

Используйте [NSNull null], если вам нужно сохранить пустой объект-заполнитель.

Например:

NSArray * myArray = [NSArray arrayWithObjects:obj1, [NSNull null], obj3, nil];

myArray будет содержать 3 объекта. При извлечении объекта вы можете выполнить простой тест на равенство указателей, чтобы определить, является ли он единичным пустым:

id object = [myArray objectAtIndex:anIndex];
if (object == [NSNull null]) {
  //it's the null object
} else {
  //it's a normal object
}

РЕДАКТИРОВАТЬ (отвечая на комментарий)

@ Майк Я думаю, ты путаешься с тем, что на самом деле происходит.

Если у вас есть:

id obj = ...;

Тогда obj содержит адрес . Он не содержит объект. Таким образом, если вы сделаете NSLog(@"%p", obj), он напечатает что-то вроде 0x1234567890. Когда вы помещаете obj в массив, он не копирует объект, а копирует адрес объекта. Таким образом, массив на самом деле содержит 0x1234567890. Поэтому, когда вы позже выполните: obj = nil;, вы воздействуете только на указатель вне массива. Массив все равно будет содержать 0x1234567890.

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