我有一個模式視圖控制器,它在自己的上下文中創建核心數據更改,當我單擊完成時,它會保存更改(調度合併更改通知),通知委託並解散。在延遲後在對象上調用委託方法
我的問題是,我需要委託收到我的主要上下文與編輯上下文的變化合並後的消息。我希望委託調用在下一次運行循環中進行,但是我遇到了對象生命週期的問題。我想到了以下內容:
- 撥打電話
[delegate performSelector:withObject:afterDelay:]
但是看起來好像該郵件無法識別。我的委託符合NSObject
協議,但不包括具有延遲的執行選擇器。 - 在我的視圖控制器中創建一個方法:
informDelegateWithObject:
,它調用委託方法,並在延遲後調用該方法。即[self performSelector:@selector(informDelegateWithObject:) withObject:.. afterDelay:..]
。然而,這可以工作,因爲我的視圖控制器正在被解僱,如果延遲幾秒鐘,那麼它會從內存中釋放,並不會導致崩潰,當涉及到調用? - 創建一個
NSInvocation
的實例。我曾經想過,但是,這個對象的壽命是多少?如果我使用[NSInvocation invocationWithMethodSignature:]
創建它,那麼NSInvocation
對象不會被自動發佈,並且不會在下一個運行循環中出現?別說幾秒鐘了。當我的模式視圖控制器被解散和釋放時,我無法將調用對象存儲在我的視圖控制器中。
有什麼建議嗎?
感謝您的回覆。實際上我有一個不同的模式,它是一個相當複雜的應用程序,我的EVC(編輯視圖控制器)從多個地方調用,因此可以有多個代表。上下文和保存都完全由EVC處理。我真的只是想知道在延遲之後調用方法的最佳方法,並且問題中描述的對象生存期問題。有任何想法嗎? – 2009-12-04 10:57:05
你仍然可以使用我的模式。 在myViewController:didFinishSaving:實現中,您可以調用myViewController上的方法...像[myViewController saveAndMergeWithMOC:self.managedObjectContext],然後關閉。 說到延遲調用選擇器... 我看到沒有錯誤使用performSelector:withObject:afterDelay :.如果你想壓制編譯器的警告,你可以定義一個包含該方法的協議。 在任何情況下,它必須工作,因爲UIViewController繼承自NSObject,並且@selector(performSelector:withObject:afterDelay :)將被Objective-C運行時找到 – muccy 2009-12-04 11:48:02