2011-03-24 81 views
0

我想加載一個基於我從我的設置文件中獲得的變量的NIB。這是代碼:從變量加載NIB

//select the right nib name 
NSString *nibVar = [nibs objectForKey:@"controller"]; 

// create the view controller from the selected nib name 
UIViewController *aController = [[UIViewController alloc] initWithNibName:nibVar bundle:nil]; 
aController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
[self presentModalViewController:aController animated:YES]; 
[aController release]; 

這不幸的是不起作用。

這裏的任何想法?

感謝

+0

什麼不起作用?控制檯是否顯示錯誤?什麼都沒有發生? – 2011-03-24 10:44:03

+0

它給出了這個錯誤:***終止應用程序,由於未捕獲異常'NSUnknownKeyException',原因:'[ setValue:forUndefinedKey:]:該類不是密鑰值編碼兼容的密鑰滾動。 – Ron 2011-03-24 10:58:27

回答

1

你不能用任意NIB實例化「UIViewController」,你必須用該類的NIB實例化「[無論你的自定義視圖控制器類是什麼」)。

它崩潰,因爲它試圖訪問UIViewController中不存在的屬性。

如果你想做這種動態的視圖控制器加載,你需要做更多的工作,並且使用特殊的Class類方法,它允許你使用類名的字符串來實例化一個對象,而不是硬編碼。

Sometehing像:

Class viewControllerClass = NSClassFromString(nibVar); 
UIViewController* aController = (UIViewController*) [[viewControllerClass alloc] initWithNibName:nibVar bundle:nil]; 
+0

檢查。很高興知道!感謝您的幫助! – Ron 2011-03-24 12:33:24

0

確保NIB的名字是正確的,不包括廈門國際銀行擴展。它也是區分大小寫的。

+0

NIB被正確命名。如果我把plist的名字粘貼到代碼中,那麼所有的東西都像魅力一樣! – Ron 2011-03-24 10:59:14

+0

設置UIViewController時出錯了。如果我用我的類名'settingsViewController'替換它們,並且保留initWithNibName:nibVar不變,那麼它就可以工作。 – Ron 2011-03-24 11:04:00