我想知道在第二个断言中这个代码在哪些情况下会中断。换句话说,什么时候可以-[UIImage CGImage]
返回nil
?文档在这里不是很有说服力。
- (void)setImage:(UIImage *)anImage {
assert(anImage);
CGImageRef cgimage = anImage.CGImage;
assert(cgimage);
}
我很确定,UIImage是正确的,因为它是从应用程序包中提取的。到目前为止,我还没有重现案例,但我确实看到了一些用户崩溃报告。
答案 0 :(得分:5)
我在文档中遇到的另一种可能性是:
如果使用CIImage对象初始化UIImage对象,则该属性的值为NULL。
答案 1 :(得分:2)
另一种可能性是你有多个线程同时访问同一个UIImage对象;这种情况发生在我的代码中,症状相同。
这也可以解释您的零星崩溃报告,因为访问模式将取决于从运行到运行的更改时间。
答案 2 :(得分:1)
据我所知,如果第一个断言通过(显示anImage不是nil),则意味着它无法加载图像。检查以确保将图像复制到捆绑包中。
答案 3 :(得分:1)
anImage
为非零而cgimage
为零的情况可以设计如下:
UIImage* myImage = [[UIImage alloc] initWithCGImage:nil];
正如先前的答案所表明的那样,在这种情况下还有其他方法可以找到自己。