我正在編寫一個遵循MVC設計模式的簡單應用程序。在Xcode項目我有三位:iPhone應用程序設計決策?
- 的AppDelegate
- 的ViewController
- 的DataModel
數據模型對象保存應用程序的所有數據,我想,以確保它被保存在應用程序退出並在應用程序啓動時重新加載。
我不確定這是否是正確的方法,我符合我的DataModel NSCoding並添加了encodeWithCoder:和initWithCoder:方法。我宣佈我的DataModel在我的viewController爲:
FlowerStore *flowerStore = [[FlowerStore alloc] init];
這是我的理解是,我需要保存和使用下面列出的AppDelegate的方法負載:
-(void)applicationDidFinishLaunching:(UIApplication *)application { // LOAD
-(void)applicationWillTerminate:(UIApplication *)application { // SAVE
任何人都可以點我在正確的方向我應該怎麼做?我可以直接在相關對象中找到所有可以存檔(或取消存檔)數據的示例(請參見下文),我需要在應用程序啓動/退出時進行加載和保存。
-(void)encodeWithCoder:(NSCoder *)encoder {
-(id)initWithCoder:(NSCoder *)decoder {
任何幫助/信息非常感謝。
EDIT_001:
我剛纔檢查的書「開始的iPhone3發展」那裏是一個部分上achiving「第11章數據持久化」,他們做的東西,我還以爲會被糟糕的設計。在本書中,他們將他們的數據模型與[NSCoding]一致,並實現編碼/解碼的方法。然後,他們在viewController中使用viewDidLoad:和applicationWillTerminate:在適當的時候取消/實現。我發現不好的是他們從UITextFields獲取數據?我有我希望存儲的數據,這些數據在用戶界面上沒有顯示,因此在我的情況下不起作用。你也不應該從dataModel存檔/取消存取,而不是通過UI控件查看視圖?
EDIT_002:
越來越近了,現在看起來你做到以下幾點:(無論是在的viewController)
-(void)viewDidLoad { // LOAD
-(void)applicationWillTerminate:(NSNotification *)notification { // SAVE
注:applicationWillTerminate使用NSNotification而不是UIApplication的,再加上你還需要添加以下代碼放在viewDidLoad的底部。
UIApplication *app = [UIApplication sharedApplication];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationWillTerminate:)
name:UIApplicationWillTerminateNotification
object:app];
加里
從模型中保存/加載是否正確?我有點困惑,我已經聲明並正在我的控制器中使用模型方法。但我不知道appDelegate在applicationDidFinishLaunching:和applicationWillTerminate:都是如何工作的? – fuzzygoat 2010-02-25 16:13:09