2011-04-27 89 views
3

我有一個視圖控制器項目列表推兩個層次。我可以選擇一個項目並推送詳細視圖控制器以顯示所選項目的詳細信息。然後,我可以選擇編輯按鈕(從導航欄中),然後按下編輯視圖控制器,以便編輯該項目的詳細信息。所有這些都在工作,包括取消和撤消。困難pushViewController一次

在第一個列表視圖控制器,我也有一個附加按鈕(在導航欄),其中I可以添加新的記錄。 (這是使用核心數據,但我認爲這與我的問題沒有關係。)我開始通過爲項目創建空白記錄進行測試,並且當詳細視圖控制器出現時,所有字段都是空白的。然後,我可以選擇編輯按鈕並編輯細節,就好像它是已經填充的記錄一樣。這也適用。

我一直在努力做的就是選擇Add按鈕,並立即推詳細視圖控制器,然後編輯視圖控制器。我想這樣做的原因是,當我彈出編輯視圖控制器時,將顯示詳細視圖控制器。 (然後,我可以彈回到列表視圖控制器或再次推入編輯視圖控制器)。我有這個麻煩

我試圖在列表視圖控制器兩次按動,就像這樣:

- (void) add { 
    clientInfoTVC.clientMO = [self createNewClient]; 
    [self.navigationController pushViewController:clientInfoTVC animated:YES]; 
    [self.navigationController pushViewController:clientInfoTVC.clientEditTVC animated:YES]; 
} 

其中clientInfoTVC.clientEditTVC指向eidt視圖控制器。當我嘗試添加時,此錯誤SIGABRT並暫停。

我然後嘗試設置在詳細視圖控制器的標誌屬性值被選擇時添加,所述第一前推,然後做在viewWillAppear中的第二推詳細視圖控制器。這個錯誤出來了。我試着將第二次推動到詳細視圖控制器的viewDidAppear,結果相同。

我迷失在這一個。有人可以給我一些想法如何通過一個視圖控制器推到第二個,這樣我可以維護導航堆棧並彈出回到中間視圖控制器?


@ljkyser擊中部分答案。但是我也發現,僅僅將視圖推送到堆棧上並不會執行它的init,viewWillAppear和viewDidLoad。我猜測,因爲所有這些都發生在主線程上,所以推視圖只是將視圖控制器排隊到運行循環上。推入第二個視圖控制器會將第一個視圖控制器從運行循環中刪除,並將第二個視圖控制器放入運行循環隊列中。也許有人可以比我剛剛做的更準確地描述它。

在任何情況下,爲了讓編輯視圖控制器正確初始化,我必須傳遞一個指針,以便它可以找到它正在處理的託管對象。我最初實例化了詳細視圖控制器中的編輯視圖控制器。因此,在我的原始代碼中,我推送了一個尚未實例化的視圖控制器。爲了安全起見,我實例化,它從列表視圖控制器,然後確保所有的管理對象的指針分別設立前,我做了雙重推動,像這樣:

- (void) add {  
    Client *clientNew = [[NSEntityDescription alloc] init]; 
    clientNew = [self createNewClient]; 
    clientInfoTVC.clientMO = clientNew; 
    clientEditTVC.clientMO = clientNew; 
    [clientNew release]; 
    [self.navigationController pushViewController:clientInfoTVC animated:NO]; 
    [self.navigationController pushViewController:clientEditTVC animated:YES]; 
} 

確認答案由@ljkyser給出,我在保持第一個動畫的同時嘗試了這些更改:YES。有了這個,導航欄看起來不錯,但其餘的視圖不同步。設置動畫:沒有解決這個問題。

回答

4

試着改變你的代碼如下:

- (void) add { 
    clientInfoTVC.clientMO = [self createNewClient]; 
    [self.navigationController pushViewController:clientInfoTVC animated:NO]; 
    [self.navigationController pushViewController:clientInfoTVC.clientEditTVC animated:YES]; 
} 

第一pushViewController動畫參數設置爲NO。

到這太問題類似:Problem pushing multiple view controllers onto navigation controller stack

還有其他的選擇也是如此。如果需要(UINavigationController reference),您可以推送並彈出特定的視圖控制器,或直接編輯UINavigationController堆棧(see here)。

+0

謝謝。你的答案是有幫助的。但是我也發現了另一個問題,我在上面的編輯中提供了細節(在該行的下面)。 – Jim 2011-04-27 13:14:17