Bezdepbonusu7Программирование: статьи и ответы

Вопрос

NSMutableArray в appdelegate - EXEC_BAD_ACCESS

Автор вопроса: Tejaswi YerukalapudiОтветов: 4

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

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

{
NSMutableArray * trnEntered;
}

@property (неатомный, сохранить) NSMutableArray * trnEntered

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

trnEntered = [[NSMutableArray alloc] init];
NSLog (@% @, [trnEntered count]); // выводит null.
[trnEntered addObject: @ 1];
NSLog (@% @, [trnEntered count]); // выполняет неверный доступ.

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

Заранее благодарим за помощь,
Тея.

iphone

Ответы

Ответ 1 · рейтинг 3 · Lyndsey Ferguson

Похоже, проблема с вашим кодом:

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

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

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

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

Ответ 2 · Fabien

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

trnEntered = [[NSMutableArray alloc] initWithCapacity:1];

Ответ 3 · futureelite7

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

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

Ответ 4 · Yashesh

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы