- [UIImage CGImage] возвращает ноль - PullRequest
3 голосов
/ 24 февраля 2011

Мне интересно, при каких обстоятельствах этот код прерывается в секунде утверждении. Другими словами, когда -[UIImage CGImage] может вернуть nil? Документация здесь не очень показательна.

- (void)setImage:(UIImage *)anImage {
    assert(anImage);
    CGImageRef cgimage = anImage.CGImage;
    assert(cgimage);
}

Я почти уверен, что UIImage правильный, так как он получен из пакета приложения. Пока мне не удалось воспроизвести случай, но я вижу некоторые сообщения о сбоях пользователей.

Ответы [ 4 ]

5 голосов
/ 19 декабря 2014

Еще одна возможность, с которой я столкнулся в документах:

Если объект UIImage был инициализирован с использованием объекта CIImage, значение свойства равно NULL.

2 голосов
/ 14 июня 2012

Другая возможность состоит в том, что у вас есть несколько потоков, одновременно обращающихся к одному и тому же объекту UIImage; это происходило в моем коде с тем же симптомом.

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

1 голос
/ 28 марта 2011

Случай, когда anImage будет не равен нулю, но cgimage будет равен нулю, можно придумать следующим образом:

UIImage* myImage = [[UIImage alloc] initWithCGImage:nil];

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

1 голос
/ 28 марта 2011

Насколько мне известно, если первое утверждение проходит (показывая, что anImage не ноль), это означает, что он не может загрузить изображение.Убедитесь, что изображение копируется в ваш пакет.

...