1

好的,我研究了一些资源和示例代码(像这样),它应该很简单,但我仍然找不到答案。

除了一个小细节之外,我已经设法让整个事情(让外部包加载和集成)工作。

我从包中得到“主”类,使用:

NSString* bundlePath = [[NSBundle mainBundle] pathForResource:@"MyBundle" 
                                                       ofType:@"plugin"];
NSBundle* myBundle = [NSBundle bundleWithPath:bundlePath];
Class someClass = [myBundle principalClass];

问题是:我如何(以及在​​哪里)在包中设置“principalClass”?

4

1 回答 1

1

该问题的解决方案相当简单(如果我们排除我自己与 Xcode 错误相关的问题,而实际上并未更新对初始项目所做的更改)。

正如@AnoopVaidya 还指出的那样,只需打开您的info.plist,即使NSPrincipalClass密钥不存在,也将其值设置为您的实际“主体类”的名称。

一旦你清理和重建你的包的主体类应该被正确识别。

文档:

NSBundle 以两种方式之一找到主体类。首先,它在包的信息属性列表中查找 NSPrincipalClass 键。如果键存在,它将使用键的值命名的类作为包的主体类。如果键不存在或者键指定了一个不存在的类,NSBundle 使用第一个加载的类作为主体类。如果包是用 Xcode 构建的,那么在项目中查看的类的顺序决定了它们的加载顺序。

来源 :

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/LoadingCode/Concepts/CocoaBundles.html#//apple_ref/doc/uid/20001269-BAJCIAHA

于 2013-03-04T08:53:37.240 回答