2012-01-23 29 views
0

我試圖模態地呈現一個UINavigationControllerUITableViewController作爲它的根視圖,但保持按下按鈕時呈現模態視圖的應用程序崩潰。UITableViewController正在初始化兩次

- (IBAction)flipToDefaultsViewController:(id)sender 
{ 

    RootTableViewController *controller = [[RootTableViewController alloc] initWithNibName:@"RootTableViewController" bundle:nil]; 

    UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:controller]; 
    nc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 

    [self presentModalViewController:nc animated:YES]; 
} 

該應用程序崩潰與消息:

[RootTableViewController numberOfSectionsInTableView:]:消息發送到釋放的實例0x5677b5

當我裝起來儀器採取進一步看它是顯然我創建了兩個我的UITableViewController實例,一個是UINavigationController的所有者,另一個是UIKit。 UIKit創建的實例是被釋放並導致崩潰的實例。

當我將初始化從initWithNibName:bundle:更改爲init時,UITableViewController加載正常(我的.xib文件與類相同)。

我的問題是爲什麼會發生這種情況?

當您將它添加到UINavigationController時,是否應該以這種方式初始化UITableViewController?到目前爲止,我已經對文檔進行了搜索。

在iOS中使用iOS 5,但目標部署爲4.0。

回答

1

我還沒有計算出爲什麼對象被初始化了兩次,但我確實檢查了我用來創建.xib文件的步驟,並且它看起來像從故事板複製視圖時出現問題到Interface Builder。事後看來這是有道理的,但由於視圖看起來似乎沒有錯誤地複製,並且其他一切似乎都很好,所以很容易完成。

似乎others類似results遇到類似的問題。

通過用nib文件(⌘-N)創建一個完全乾淨的子類UITableViewController並將初始類中的代碼複製到新類中,我可以使用上面的初始代碼來分配/初始化我的模態視圖。

順便說一句當我在開幕文章中誤解了使用init時正確加載的筆尖文件。事實並非如此,UITableViewControllerapparently這種行爲不會發生,其他類的名稱與.xib文件相同的類將首先嚐試加載.xib。

+0

這件事發生在我身上,很難追查到。你的評論爲我節省了更多的時間! –

+0

你介意我問完全是哪一部分? – craigmarch

+0

在啓用ARC的項目中,將故事板中的視圖複製到.xib中導致應用程序崩潰。當我推送視圖時,副本中的某些內容正在遞減我的視圖引用計數。 –

0

如果這是一個按鈕,當按下按鈕時不應該初始化任何東西。您應該事先進行初始化,並在按下按鈕時僅顯示modalViewController

是否有任何理由爲什麼rootViewController和導航控制器無法在appdelegate didFinishLaunchingWithOptions方法中初始化?

+0

但是當然你不想初始化一個對象的方式,然後它可能永遠不會被使用? – craigmarch