Простое назначение не работает с UIImage * / imageNamed - PullRequest
0 голосов
/ 21 апреля 2009
UIImage* test = [UIImage imageNamed:@"test.png"];
self.image_in_controller = test;

Позже в коде, когда используется image_in_controller, я получаю EXC_BAD_ACCESS.

Я установил точку останова во время выполнения задания. Переменная test устанавливается очень хорошо ... после присваивания selfimage_in_controller test все еще в порядке, но image_in_controller указывает на 0x0 (не nil).

Если я запускаю тот же код в симуляторе, он работает нормально (self.image_in_controller имеет действительный точечный адрес).

Есть идеи?

1 Ответ

3 голосов
/ 21 апреля 2009

Является ли недвижимость image_in_controller оставшейся собственностью? Если нет, вам придется явно завладеть изображением с помощью сообщения retain. Итак, один из:

@property(retain) UIImage* image_in_controller;

или

self.image_in_controller = [test retain];

должно существовать. EXC_BAD_ACCESS часто вызывается использованием разрушенного объекта. Кроме того, проверьте, чтобы убедиться, что тест на самом деле не ноль. Вы можете сделать это с утверждением:

NSParameterAssert(test);

сразу после назначения теста. Он сообщит вам, если UIImage по какой-то причине не возвращает действительный объект на устройстве.

Наконец, 0x0 - это адрес памяти nil, поэтому вы часто будете видеть, что в отладчике он может (для всех намерений и целей) рассматриваться как nil, Nil, NULL и 0.

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