2010-05-27 46 views
3

我正在研究一個項目,該項目將上傳包含NSViewController的自定義NSBundles。在我的主程序我有了這個代碼來處理同捆它加載後...NSBundle加載NSViewController

id principalClass = [loadedBundle principalClass]; 
id instance = [[principalClass alloc] init]; 
[localLabel setStringValue:[instance name]]; 
NSView *incomingView = [[instance viewController] view]; 
[localView addSubview:incomingView]; 
[localView display]; 

而被捆綁的主要類init方法看起來像這樣...

-(id) init { 
    if(self = [super init]){ 
     name = @"My Plugin"; 
     viewController = [[ViewController alloc] initWithNibName:@"View" bundle:nil]; 
    } 
    return self; 
} 

View.nib是位於捆綁項目中的一個nib。但是每當我加載捆綁我得到這個錯誤...

2010-05-27 09:11:18.423 PluginLoader [45032:a0f]無法找到名爲:在包視圖中查看nib:(空) 2010- 05-27 09:11:18.424 PluginLoader [45032:a0f] - [NSViewController loadView]無法加載「查看」筆尖。

我知道我已經連線了一切,因爲行[label setStringValue:[instance name]];正確設置標籤文本。另外,如果我將捆綁中的所有分支並將它們加載到我的主應用程序項目中,那麼所有功能都可以按預期運行。有關我如何正確引用我的包中的「視圖」的任何想法?

謝謝!

回答

2

init方法中,您不應將nil傳遞給bundle參數。根據UIViewController文檔,通過nil將查找主包(應用程序的一個)中的NIB文件,這不是您想要的。

您可以變通,通過使用專門的初始化是這樣的:

- (id) initWithBundle:(NSBundle *)bundle { 
    if(self = [super init]){ 
     name = @"My Plugin"; 
     viewController = [[ViewController alloc] initWithNibName:@"View" bundle:bundle]; 
    } 
    return self; 
} 

並以此如下:

Class principalClass = [loadedBundle principalClass]; 
id instance = [[principalClass alloc] initWithBundle:loadedBundle]; 
+0

'''''''''''''''''''''''''''出於可讀性的原因,我可能會對'principalClass'變量使用'Class'類型。 – dreamlax 2010-05-27 14:49:32

+0

就在頭上。在20分鐘內!謝啦 – Staros 2010-05-27 14:52:13

0

「View.xib是一個筆尖」?要麼它是一個xib或它是一個筆尖。 xib不是筆尖。 xib文件只能在界面構建器中使用,在部署應用程序中,它們必須轉換爲nib文件。這就是ibtool正在做的事情。 Xcode不會簡單地複製您的xib文件,而是通過ibtool運行它們,將它們轉換爲nib文件,然後將它們放入Resources文件夾中。

+2

一個廈門國際銀行是一個筆尖,只需在XML格式。接口構建器可以使用xib或者nib,但是xibs更便於開發,因爲它們可以更好地與SCM工具配合使用。 – dreamlax 2010-05-27 14:42:48

+0

@dreamlax:Apple的文檔非常清晰,xib文件不打算部署。即使創建調試版本,您也應該在複製階段將xib轉換爲nib文件。 Apple不保證每個可以處理nib文件的方法/函數都可以同樣處理xib文件。考慮xib文件(如PDF文件(矢量圖形,文本和位圖)和nib文件,如PNG文件(僅限位圖))。並非所有可以處理PNG圖像的圖像功能都可以處理PDF文檔。 – Mecki 2010-05-27 16:18:45

+1

您正在將nib/xib *文件格式*與nib文件混淆。請參閱[本文檔](http://developer.apple.com/iphone/library/documentation/DeveloperTools/Conceptual/IB_UserGuide/BuildingaNibFile/BuildingaNibFile.html#//apple_ref/doc/uid/TP40005344-CH11-SW14)。 xib文件格式仍然代表一個nib文件。一個nib文件有兩種格式,xib和nib。在引入xib之前(僅用於更好的SCM支持),一個nib文件具有一種格式,即nib文件格式。從鏈接中:「xib文件格式表示nib文件對象圖的展開存檔。」 – dreamlax 2010-05-27 22:11:00

相關問題