2013-07-08 36 views
0

我有幾個數組希望在應用程序終止時保存。我在應用程序委託中使用NSUserDefaults實現了這一點。任何人都可以看看我的代碼,看看有什麼不對嗎?它不起作用。將數據保存在應用程序代理中

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    workouts = [NSMutableArray arrayWithObjects:nil]; 
    menu = [NSMutableArray arrayWithObjects:@"Home",nil]; 
    workoutNames = [NSMutableArray arrayWithObjects:nil]; 
    routinesMade = [NSMutableArray arrayWithObjects:nil]; 
    test = [NSMutableArray arrayWithObjects:nil]; 

    defaults = [NSUserDefaults standardUserDefaults]; 
    self.workouts = [defaults objectForKey:@"workouts"]; 
    self.menu = [defaults objectForKey:@"menu"]; 
    self.workoutNames = [defaults objectForKey:@"workoutNames"]; 
    self.routinesMade = [defaults objectForKey:@"routinesMade"]; 


    return YES; 
} 


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

    defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject:workouts forKey:@"workouts"]; 
    [defaults setObject:menu forKey:@"menu"]; 
    [defaults setObject:workoutNames forKey:@"workoutNames"]; 
    [defaults setObject:routinesMade forKey:@"routinesMade"]; 
    [defaults synchronize]; 

} 

順便說一句,我聲明默認的頭文件。多謝你們!

+0

我忘了提,我想第一種方法中加載數據。 –

+0

你可以嘗試alloc/init的NSMutableArrays?同時檢查以確保在您調用同步時保存數組。 – MichaelScaria

回答

4

我想我知道問題是什麼。您的代碼在applicationWillTerminate:方法中。除非你明確地設置應用程序不要在後臺運行(通過設置'應用程序不在後臺運行'鍵),幾乎可以肯定的是,這個方法永遠不會被調用,因爲當它被系統終止時,它將會已經被暫停。

在這種情況下,請考慮在applicationDidEnterBackground:方法中保存所需的信息。

希望這會有所幫助!

0

鍛鍊和self.workouts是我的一個屬性是否正確? 所以你創建數組

workouts = [NSMutableArray arrayWithObjects:nil]; 

然後用空覆蓋它,因爲[defaults objectForKey:@"workouts"]包含null

相關問題