Попытка вставить ноль - PullRequest
       10

Попытка вставить ноль

2 голосов
/ 05 декабря 2009

Похоже, что легко добавить логическое значение в NSMutableArray.

Предположим, toDoArray инициализирован как NSMutableArray. Следующее:

BOOL checkBoxState = NO;
[toDoArray addObject:checkBoxState]; 

Генерирует ошибку «попытка вставить ноль».

Как правильно добавить отрицательный логический аргумент в изменяемый массив?

Ответы [ 3 ]

6 голосов
/ 05 декабря 2009

Как уже говорили другие, NSMutableArray может содержать только объекты Objective-C. Они не обязательно должны быть подклассами NSObject, но это наиболее типично.

Однако, задолго до того, как вы увидели ошибку attempt to insert nil. времени выполнения, вы должны были увидеть предупреждение компилятора:

warning: passing argument 1 of 'addObject:' makes pointer from integer without a cast

Это [неопределенным и окольным путем] точно говорит вам, в чем проблема; вы пытаетесь вставить что-то в массив, который не является указателем [на объект].

Обратите внимание на предупреждения и исправьте их. В большинстве случаев наличие предупреждения будет указывать на ошибку или сбой во время выполнения.

5 голосов
/ 05 декабря 2009

NSMutable массивам требуется идентификатор, странная часть Objective C. Идентификатор - это любой объект, но не примитив (например, int s являются примитивами, в то время как NSArray s являются объектами, а в расширении, id s).

Этот вопрос может помочь.

0 голосов
/ 27 марта 2012

Вам нужно использовать NSNumber для переноса любых примитивных типов (BOOL, int, NSInterger и т. Д.) Перед размещением его внутри объекта коллекции (NSArray, NSDictionary и т. Д.).

Добавить BOOL в массив:

BOOL checkBoxState = NO;
NSNumber* n = [NSNumber numberWithBool:checkBoxState];
[toDoArray addObject:n];

Получить BOOL из массива:

NSNumber* n = [toDoArray objectAtIndex:0];
BOOL checkBoxState = [n boolValue];
...