2016-07-30 44 views
1

我想构建一个简单的屏幕保护程序。我做的第一件事是从资产目录加载图像[[NSImage imagedNamed:]],该方法返回一个零值,这意味着它无法找到图像。当我尝试使用方法[[NSBundle mainBundle]URLForImageResource:]直接从包中加载图像时,我也得到一个零值。我不明白为什么会发生这种情况。该图片位于资产目录和项目设置中,我已将其设置为资源包。为什么我无法加载位于资产目录中的图像?

+0

'[NSImage imageNamed:]'用于访问应用程序包中的图像,而不是资产目录。为什么你不能将图像放入应用程序包中? – Droppy

+1

我已经为视网膜和非视网膜mac优化了我的图像版本,所以我认为最好的方式就是资产目录。当然,我可以直接将图像放在应用程序包中,但这也不起作用。 – ok404

回答

0

当我继续在互联网上搜索后,我发现屏幕保护程序是作为某种插件执行的,并且通过加载主包我加载了系统偏好包,这意味着我无法通过加载我的资源主包,而不是我必须加载捆绑bundleIdentifier或束保存的路径。 所以我的代码看起来像现在这样:

NSBundle*bundle=[NSBundle bundleWithIdentifier:@"com.myname.APOD"]; 
NSImage*image=[[NSImage alloc] initWithContentsOfFile:[bundle pathForResource:@"appimage" ofType:@"png"]]; 
0

可以通过名字资产目录访问图像,但不使用的NSImageimageNamed:方法 -

相反,你可以查询图像资源的bundle具体名称,例如找到类的包的图像请求图像您可以:

NSBundle *bundle = [NSBundle bundleForClass:[self class]]; 
NSImage *myImage = [bundle imageForResource:@"MyImageName"]; 

其中MyImageName指的是你在你的资产目录分配的映像名称。

相关问题