2009-10-29 56 views
1

这可能是一个n00b问题,所以我提前道歉。我第一次使用NSImage,基本上我需要简单地拍摄一张位于“我的资源”文件夹中的图片,并在单击按钮时将其显示在NSView/NSImageWell中。打印文件到NSImage不能正常工作(可可)

NSImage *image = [[NSImage alloc] initWithContentsOfFile:@"tiles.PNG"]; 
if ([image isValid]) { 
NSImageView *view = [[NSImageView alloc] init]; 
[selection setImage:image]; 
[selection setImageScaling:NSScaleProportionally]; 
} 
else { 
--- This line of code always activates meaning my image isn't valid  
} 

我唯一的猜测是我得到的图像文件的路径错误,我已经找遍了正确的方式来访问它。另一个猜测是我的代码错了。任何人都熟悉这个?谢谢!

回答

3

我工作lot更多与iPhone,但initWithContentsOfFile似乎需要一个完整/相对路径,我认为tiles.PNG不会履行。

我会使用类方法imageNamed:(NSString *)名称,它会为您搜索您的包。

0

您应该使用NSBundleManger找到像这样的形象:

NSBundle *mb=[NSBundle mainBundle]; 
NSString *fp=[mb pathForResource:@"titles" ofType:@"PNG"]; 
UIImage *img=[UIImage imageWithContentsOfFile:fp]; 

这样,你不必与自己内部的路径一塌糊涂。否则,你必须有相对于难以创建和维护的最终产品的路径。

+0

请注意,他使用的是NSImage/NSImageWell,这些在iPhone上不可用,所以他必须在Mac上,因此无法访问UIKit,并且无法访问UIImage。另外,UIImage/NSImage * img = [UIImage imageNamed:@“titles.PNG”]将完成与上面的代码相同并稍微清晰一些。 – refulgentis 2009-10-30 07:23:39

+0

是的,我正在写这个MAC,而不是iPhone。我认为代码是正确的,但我的图像没有出现。我是否必须使ImageWell成为一个自定义类,并带有NSView的子类?我只是从IB拖出一个Imagewell,并将其称为“预览”,并在将它声明在我的.h文件中之后引用它。现在的代码工作,因为如果[图像isValid]满意,但仍然没有图像打印到我的观点:( – Brian 2009-10-30 15:30:53

+0

无论你在Mac上,我只是掌握了代码,因为我手头上。原理是一样的,如果文件在资源文件夹中,使用NSBundle找到它的路径,也可以在NSFileManager的'fileExistsAtPath:'中敲击以确保该文件位于由NSBundle返回的路径上 – TechZen 2009-10-30 15:37:52