我有一個數組在我的根視圖控制器,我需要保存(使用核心數據)每當調用applicationDidEnterBackground
。我怎樣才能發送消息到委託內的根視圖控制器的實例?如何將另一個視圖控制器的數組保存到應用程序委託中的文件中?
我在考慮給委託人一個參考視圖控制器時,它被設置爲根,但這感覺效率低下。有一個更好的方法嗎?
我有一個數組在我的根視圖控制器,我需要保存(使用核心數據)每當調用applicationDidEnterBackground
。我怎樣才能發送消息到委託內的根視圖控制器的實例?如何將另一個視圖控制器的數組保存到應用程序委託中的文件中?
我在考慮給委託人一個參考視圖控制器時,它被設置爲根,但這感覺效率低下。有一個更好的方法嗎?
1)在你的RootViewController的.h文件中,
+ (RootViewController *) sharedStore;
2)在你的RootViewController的.m文件,
+ (RootViewController *) sharedStore
{
static RootViewController *myStore = nil;
if (!myStore) {
myStore = [[RootViewController alloc] init];
}
return myStore;
}
3)轉到您AppDelegate.m文件並導入RootViewController的
#import RootViewController.h
4)在您的AppDelegate.m文件中,轉到ApplicationDidEnterBackground方法並鍵入:
[[RootViewController sharedStore] saveChanges];
5)在RootViewController中實現saveChanges方法。
在您的根視圖控制器中註冊以接收ApplicationWillEnterBackground通知。然後,根視圖控制器可以在收到此通知時執行保存。
你最初的本能,以減少控制器之間的耦合是一個很好的。
AJ112的回答讓:
UIViewController
單身,這是不是一個好的做法。UIApplication
,這是儘可能避免的東西。有一些UIApplication
通知,你可以從你需要處理多任務處理任何類觀察。檢查答案在這太問題:
iphone 4 sdk : detect return from background mode
您可以查看所有通知是UIApplication
帖子在這裏:
心不是店裏被設置爲零每次調用此方法? –
它是一個靜態變量,它在對象的生命週期中不會被分配超過一次 – Tim
那麼,只要到達並且不是第一次,該行就會被忽略? –