2013-10-14 44 views
0

我是iOS新手。我有一個嵌入在導航控制器中的表格視圖。另一個表格視圖也嵌入在導航控制器中。第一個表視圖ChecklistsView顯示第二個表視圖ItemDetailView。 ChecklistView的導航控制器'+'按鈕打開ItemDetailView場景。點擊ItemDetailView的Cancel按鈕可關閉ItemDetailView,但會顯示上面提到的消息。下面是取消方法的代碼:嘗試從視圖控制器<UINavigationController:0x717f0f0>退出時正在進行演示或解散

- (IBAction)cancel 
{ 
    [self.delegate itemDetailViewControllerDidCancel:self]; 
} 

,這裏是在取消方法所使用的委託方法:

- (void)itemDetailViewControllerDidCancel:(ItemDetailViewController *)controller 
{ 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

任何建議,將不勝感激。我已閱讀關於此警告的其他帖子,但它們超出了我的專業水平。

回答

0

你不應該委託關閉viewController。

相反,您應該通過在presentViewController上使用.presentingViewController屬性來解除它。

像這樣:

[self.presentingViewController dismissViewControllerAnimated:YES completion:nil]; 
0

我AdamG不同意。你在做什麼是正確的;蘋果公司也使用這種設計,代表解散控制器(檢出MFMessageComposeViewController)。

回到問題,如果我理解正確的話,那你有以下結構(赦免條款,但你會得到的要點):

  • 一個UINavigationController頂部
  • ChecklistsViewController是導航控制器的根視圖控制器
  • ItemDetailViewController爲模態的視圖控制器
  • ChecklistsViewControllerItemDetailViewController
  • 委託

這只是你的情況下的實現細節。

- (void) itemDetailViewControllerDidCancel: (ItemDetailViewController*) controller 
{ 
    [controller dismissViewControllerAnimated: YES 
            completion: nil]; 
} 
+0

使用Vrol推薦的代碼,我繼續得到相同的消息(警告)。 –

+0

@JimBotts:如果您關閉兩次相同的視圖控制器,則會出現此警告。檢查你的dismissViewControllerAnimated:completion:調用是否被一個接一個地調用,可能來自不同的類。確保只有委託人關閉視圖控制器,沒有別的。 –

+0

我按照你的建議說了兩條其他的線叫dismissViewController,我仍然收到這條消息。謝謝。 –

相關問題