为什么[NSBundle mainBundle]不在这里工作?

时间:2011-09-07 15:11:47

标签: objective-c cocoa

我从未加载过捆绑包,所以我不确定为什么这不起作用。我认为这不重要,但这里讨论的.xib与我所有其他.xibs在同一个Resources文件夹中。

NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"S3AsyncView" owner:self];

返回此错误:

Instance method -loadNibNamed:owner not found.  Return type defaults to id

我觉得这个错误很奇怪,因为[NSBundle mainBundle]的返回类型当然是NSBundle。

2 个答案:

答案 0 :(得分:1)

NSBundle中没有这样的方法,因此错误。

我猜你在找:

loadNibNamed:owner:options:

您可以将nil传递给选项,因为它需要NSDictionary

所以在你的情况下:

NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"S3AsyncView" owner:self options:nil];

修改

如果仍然无效,请确认您已包含<UIKit/UIKit.h>

编辑2

好的,现在我明白了。你用iOS标记了你的问题,但现在你说它是一个Cocoa应用程序。

loadNibNamed:owner:options:是UIKit的补充,因此只能在iPhone上使用。

在Mac OS X上,您将使用+ (BOOL)loadNibNamed:(NSString *)aNibName owner:(id)owner类方法。

所以:

NSArray *array = [ NSBundle loadNibNamed: @"whatever" owner: self ];

答案 1 :(得分:1)

三件事:

  1. 确保您正确拼写方法名称。您提供的错误消息将方法名称显示为:-loadNibNamed:owner:options,这是不正确的。 “选项”之后应该有一个冒号。也许你错过了将名字粘贴到你的信息中,但这里的教训是仔细检查你是否使用了正确的方法名称,没有拼写错误,省略了部分,缺少冒号等等。

  2. 确保您与UIKit相关联。 NSBundle是Foundation框架的一部分,但-loadNibNamed:owner:options:方法来自NSKundle上的UIKit Additions类,它是UIKit的一部分。如果你没有链接到UIKit,那么,NSBundle将没有这种方法。

  3. 我发现您已从标记列表中删除了。如果您正在为Cocoa编写并尝试加载nib,请参阅NSNib类以获取一些加载nib的方便方法。