NSMutableArray в appdelegate - EXEC_BAD_ACCESS - PullRequest
0 голосов
/ 07 июня 2010

Я пытаюсь использовать глобальный массив в appdelegate как быстрое решение для демонстрации, которую я создаю.Соответствующий код для этого

.h файла имеет объявление

{NSMutableArray * trnEntered;}

@ property (nonatomic, retain) NSMutableArray * trnEntered

.m имеет следующий код -

trnEntered = [[NSMutableArray alloc]в этом];NSLog (@ "% @", [trnEntered count]);// печатает ноль.[trnEntered addObject: @ "1"];NSLog (@ "% @", [trnEntered count]);// исполним плохой доступ.

Не уверен, что я здесь не так.Выглядит довольно прямо.

Спасибо за помощь заранее,Тея.

Ответы [ 4 ]

3 голосов
/ 07 июня 2010

Кажется, проблема с вашим кодом:

NSLog(@"%@",[trnEntered count]); // prints null.
[trnEntered addObject:@"1"]; 
NSLog(@"%@",[trnEntered count]); // exec bad access.

Оба вызова NSLog пытаются распечатать NSUInteger как объект Objective-C. Это собирается вызвать проблему. Вы должны использовать NSLog(@"%d", [trnEntered count]);

Я бы посоветовал вам прочитать больше о спецификаторах формата , там много полезной информации.

Как еще немного информации: второй NSlog пытается напечатать description объекта NSO, который, как утверждает код, находится в ячейке памяти 0x00000001.

0 голосов
/ 04 февраля 2011

NSLog печать по умолчанию в формате String, поэтому, если вы хотите напечатать целочисленное значение, вы должны использовать %d и его значение.

0 голосов
/ 07 июня 2010
trnEntered = [[NSMutableArray alloc] init];
NSLog(@"%@",[trnEntered count]); // prints null.
[trnEntered addObject:@"1"];
NSLog(@"%@",[trnEntered count]); // exec bad access.

Причина в том, что вы неправильно используете строку форматирования. Вы пытаетесь использовать целое число в качестве указателя строки, что, конечно, приведет к ошибке сегментации (или EXC_BAD_ACCESS в терминах яблока). Используйте% d для вывода целого числа, которое возвращает [trnEntered count].

0 голосов
/ 07 июня 2010

Первый NSLog не должен печатать 'null', у вас проблема с тем, как вы инициализируете. Попробуйте вместо этого.

trnEntered = [[NSMutableArray alloc] initWithCapacity:1];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...