Я пытаюсь использовать глобальный массив в appdelegate как быстрое исправление для демонстрации, которую я создаю. Соответствующий код для этого
.h файл имеет объявление
{
NSMutableArray * trnEntered;
}
@property (неатомный, сохранить) NSMutableArray * trnEntered
.m файл имеет следующий код -
trnEntered = [[NSMutableArray alloc] init];
NSLog (@% @, [trnEntered count]); // выводит null.
[trnEntered addObject: @ 1];
NSLog (@% @, [trnEntered count]); // выполняет неверный доступ.
Не уверен, что я здесь ошибаюсь. Выглядит довольно просто.
Заранее благодарим за помощь,
Тея.
Ответ 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 и его значение.