我正在使用UIImage来绘制png。我得到了一种我无法理解的怪异行为。
以下代码导致nil im reference并因此打印“PROBLEM!”
UIImage *im = [[UIImage alloc] initWithContentsOfFile:@"tree.png"];
if (nil==im)
NSLog(@"PROBLEM! IMAGE NOT LOADED\n");
else
NSLog(@"OK - IMAGE LOADED\n");
这段代码很好用:
UIImage *im = [UIImage alloc];
[im initWithContentsOfFile:@"tree.png"];
if (nil==im)
NSLog(@"PROBLEM! IMAGE NOT LOADED\n");
else
NSLog(@"OK - IMAGE LOADED\n");
我错过了什么?
答案 0 :(得分:8)
[[UIImage alloc] initWithContentsOfFile:@"tree.png"];
存在, /tree.png
会返回您的图片。但它不存在。您应该传递到initWithContentsOfFile
完整路径,而不仅仅是文件名。
现在,第二个代码可以正常工作,因为[UIImage alloc]
会返回一些未初始化的引用。在下一行中,您尝试使用[im initWithContentsOfFile:@"tree.png"];
初始化它,但您忘记在[{1}}中保存返回的值,如下所示:im
。
如果图片im = [im initWithContentsOfFile:@"tree.png"];
已保存在您的捆绑包中,那么您可以使用此类方法:tree.png
或其他:
UIImage *im = [UIImage imageNamed:@"tree.png"];
答案 1 :(得分:4)
图片是否在图片中并且是PNG图片?使用initWithContentsOfFile:
初始化的UIImage对象,如果方法无法找到文件或从其内容初始化图像,则为nil。
此外,由于您在本地使用UIImage,我假设您可以使用imageNamed:
类方法,因此它可以在主包中搜索图像:
UIImage *im = [UIImage imageNamed:@"tree.png"];
if (nil==im)
NSLog(@"PROBLEM! IMAGE NOT LOADED\n");
else
NSLog(@"OK - IMAGE LOADED\n");
答案 2 :(得分:0)
尝试:
NSString *path = [[NSBundle mainBundle] pathForResource:@"tree" withExtension:@"png"];
UIImage *im = [[UIImage alloc] initWithContentsOfFile:path];
从应用程序包中加载图像。
答案 3 :(得分:0)
initWithContentsOfFile:
会为对象调用autorelease
。如果您在一段时间后尝试访问图像,则会出错(EXC_BAD_ACCESS)。
因此,您应始终将init
方法与alloc
配对使用,并且不要忘记release
位于某处。