有人建议我使用这行代码从我的资源文件夹/项目包中调用图像。我也看到它在许多不同的网站教程中使用完全相同。
NSBundle *mb=[NSBundle mainBundle];
NSString *fp=[mb pathForResource:@"topimage" ofType:@"PNG"];
NSImage *image=[NSImage initWithContentsOfFile:fp];
但是,我收到以下警告:
NSImage可能无法响应+ initWithContentsOfFile +
NSImage的文档显示initWithContentsOfFile实际上是一个应该工作的方法。我可能会在这里失踪什么?
答案 0 :(得分:5)
您错过了+alloc
NSImage* image = [[NSImage alloc] initWithContentsOfFile:fp];
您还可以使用+imageNamed:
,从主包中提取图片。
NSImage* image = [NSImage imageNamed:@"topImage.png"];
答案 1 :(得分:4)
initWithContentsOfFile:
是一个实例方法,但是您将该消息发送到NSImage类。您需要将它发送到实例 - 特别是新分配的实例。
这就是alloc
的用武之地。它是一个分配实例的类方法,然后立即发送init…
消息(如Darren所示)。
完成后不要忘记释放实例。我通常在启动后立即自动释放实例;然后,Cocoa将在适当的时候为我发布实例。有关详细信息,请参阅Memory Management Programming Guide for Cocoa。