为什么我无法加载资产目录中的图像?

Why can't I load an image which is located in the assets catalog?

我正在尝试构建一个简单的屏幕保护程序。我做的第一件事是使用方法 [NSImage imagedNamed:] 从资产目录加载图像,其中 returns 为 nil 值,这意味着它无法找到图像。当我尝试使用方法

直接从包中加载图像时

[[NSBundle mainBundle] URLForImageResource:]

我也得到了一个零值。我不明白为什么会这样。该图像位于资产目录和项目设置中,我已将其设置为捆绑资源。

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

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

可以通过名称访问资产目录中的图像,但不能使用 NSImage -

imageNamed: 方法

相反,您可以查询捆绑包以获取特定名称的图像资源,例如要在请求图像的 class 的捆绑包中查找图像,您将:

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

其中 MyImageName 是指您在资产目录中为图像指定的名称。