Cocoa - 使用NSBundle的代码问题

时间:2009-11-02 04:22:33

标签: cocoa macos nsimage nsbundle

有人建议我使用这行代码从我的资源文件夹/项目包中调用图像。我也看到它在许多不同的网站教程中使用完全相同。

NSBundle *mb=[NSBundle mainBundle];


NSString *fp=[mb pathForResource:@"topimage" ofType:@"PNG"];


NSImage *image=[NSImage initWithContentsOfFile:fp];

但是,我收到以下警告:

  

NSImage可能无法响应+ initWithContentsOfFile +

NSImage的文档显示initWithContentsOfFile实际上是一个应该工作的方法。我可能会在这里失踪什么?

2 个答案:

答案 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