1

我需要在NSUserDefaults中保存一個NSMutableDictionary。我在網上搜索了很多例子,但沒有收到足夠相關的例子。有人可以發佈一小段代碼來關閉NSUserDefaults中的NSMutableDictionary,並在應用程序啓動時檢索它嗎?你也可以告訴我在哪裏放置代碼。NSUserDefaults幫助

我自己有一些代碼,但它不工作。

appDelegate.h - 數據

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

    // Override point for customization after application launch. 

     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
     NSData *dat = [defaults objectForKey:@"theKey"]; 
     tmpArray = [[NSMutableArray alloc] init]; 
     tmpArray = [NSKeyedUnarchiver unarchiveObjectWithData:dat]; 

     [self.window makeKeyAndVisible]; 
     [window addSubview:tabBarController.view]; 
     return YES; 
} 

appDelegate.h檢索 - 數據

- (void)applicationWillTerminate:(UIApplication *)application { 

     [self saveContext]; 
     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
     NSData *dat = [NSKeyedArchiver archivedDataWithRootObject:tmpArray]; 
     [defaults setObject:dat forKey:@"theKey"]; 
} 

是的,它是爲一個陣列的存儲,但我將需要一個用於的NSMutableDictionary。

+0

我覺得問題不在於NSUserDefaults。可能是您放置代碼的地方可能無法爲您保存數據。你可以發佈整個appDelegate方法嗎?你也可以放一個斷點,看看NSMutableDictionary是否保存在NSUserDefaults中? – 2011-03-26 06:43:38

回答

5

applicationWillTerminate:

的討論對於不支持後臺執行或者是針對iOS的3.x或鏈接的應用較早,當用戶退出應用程序這種方法總是被調用。 對於支持後臺執行的應用程序,當用戶退出應用程序時,通常不會調用此方法,因爲在這種情況下應用程序只是移動到後臺。但是,可能會在應用程序在後臺運行(未掛起)並且系統因某種原因需要終止它的情況下調用此方法。

要保存你的對象,你應該把你的代碼applicationDidEnterBackground:了。

在iOS 4.0和更高版本中,當用戶退出支持後臺執行的應用程序時,將調用此方法,而不是applicationWillTerminate:方法。您應該使用此方法釋放共享資源,保存用戶數據,使計時器無效並存儲足夠的應用程序狀態信息,以便將應用程序恢復到其當前狀態,以防稍後終止。您還應該禁用應用程序用戶界面的更新,並避免使用某些類型的共享系統資源(例如用戶的聯繫人數據庫)。避免在後臺使用OpenGL ES也是必要的。


要保存的字典而不是數組的簡單地用字典


替換陣列的所有事件和修復泄漏

tmpArray = [[NSMutableArray alloc] init]; // not used, not released but `alloc`ed. 
tmpArray = [NSKeyedUnarchiver unarchiveObjectWithData:dat]; 

通過去除所述第一線。