0

這裏需要一些最佳實踐建議...UIViewControllers彼此絆倒

基於導航的應用程序。根視圖是一個UITableView,用戶可以深入到一個細節UIViewController(稱之爲VC1)。用戶想要啓動一些任務,但它可能可能需要額外的信息才能繼續。如果是這樣的話,VC1分配&呈現模態VC2使用「翻轉」轉換,在屬性中保持對VC2的強引用。

所有相當標準。這是我遇到麻煩的地方。一旦用戶在VC2中填寫需要的信息,應用程序可以繼續到MFMailComposeViewController或翻轉回VC1。如果他們繼續MailCompose,那麼當它解散它應該返回到VC1。

VC2有弱引用VC1和問題棱時VC2試圖解僱本身和現在MFMailComposeViewController

[self dismissModalViewControllerAnimated:YES]; 
[VC1 performSelector:@selector(showMailModalView) withObject:nil afterDelay:0.2]; 

我得到一個EXC_BAD_ACCESS上VC1,因爲,很顯然,我的弱引用VC1已是即使VC1對VC2有很強的參考,也可以解除分配!

所以我的問題是......這應該怎麼處理?代表模式會更好嗎?這將如何觸發?

注意:VC1非常大,並且通常不需要VC2,因此我試圖使VC2儘可能與VC1(包括其自己的NIB)分離。

回答

1

VC2有弱引用VC1和問題棱時VC2試圖 駁回本身和現在 MFMailComposeViewController:

你有什麼是圓形的依賴,因爲VC1知道VC2,然後你讓VC2知道VC1。而當你有循環依賴時,你會遇到各種各樣的問題。

你應該在這裏使用委託模式。當VC1呈現VC2時,它應該使自己成爲VC2的代表。當VC2完成並且想要解散時,它應該讓委託人處理該操作。換句話說,顯示VC2的東西應該是解散VC2的東西。 VC2應該以這樣的方式實施,即它不應該知道呈現它的內容,只是呈現它的內容將負責解除它。

兩個類似的答案,我已經給最近:

Pop-up modal with UITableView on iPhone

call method in a subclass of UIView

0

我遇到了同樣的問題,我試圖回想我如何修復它。

你可以嘗試致電:

[self.parentViewController dismissModalViewControllerAnimated:YES] 

或者你可以有你的showMailModalView方法處理駁回顯示郵件撰寫之前,在當前模態視圖控制器?