2014-02-16 50 views
0

我想知道是否有一種方法來保持用戶輸入時來回導航到我的主菜單使用UINavigationBar後退箭頭使用NSCoder。我目前使用NSCoder在後臺/終止/重啓過程中維護此數據,NSUserDefaults維護視圖之間的數據,但NSCoderNSUserDefaults的組合給出了不可預知的結果。有時,這兩種恢復工作,但有時BG/Term/RS恢復不起作用,並且我正在討論在我的設備上加載相同的相同代碼。當NSUserDefaults代碼被註釋掉時,每次BG/Term/RS恢復工作。使用NSCoder恢復視圖(viewWillAppear/viewWillDisappear)

我想知道是否有可能使用NSCoder來滿足我所有的恢復需求,如果是的話,那麼代碼將會是什麼樣子。

這是我在用的BG /學期/ RS恢復:

-(void)encodeRestorableStateWithCoder:(NSCoder *)coder { 
    // start level text 
    [coder encodeObject:_startLevel.text forKey:@"startText"]; 

    // stop level text 
    [coder encodeObject:_stopLevel.text forKey:@"stopText"]; 
} 

-(void)decodeRestorableStateWithCoder:(NSCoder *)coder { 
    // start level text 
    _startLevel.text = [coder decodeObjectForKey:@"startText"]; 

    // stop level text 
    _stopLevel.text = [coder decodeObjectForKey:@"stopText"]; 
} 

這是我目前使用的持久化數據來回我的菜單和主視圖之間NSUserDefaults代碼,並我會非常喜歡的NSCoder解決方案來替換:

- (void)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 

    // start level 
    [[NSUserDefaults standardUserDefaults] setObject:_startLevel.text 
               forKey:@"startLevelRestore"]; 
    // stop level 
    [[NSUserDefaults standardUserDefaults] setObject:_stopLevel.text 
               forKey:@"stopLevelRestore"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 

- (void)viewWillAppear:(BOOL)animated { 
     [super viewWillAppear:animated]; 

     // start level 
     [_startLevel setText:[[NSUserDefaults standardUserDefaults] 
            objectForKey:@"startLevelRestore"]]; 

     // stop Level 
     [_stopLevel setText:[[NSUserDefaults standardUserDefaults] 
            objectForKey:@"stopLevelRestore"]]; 

     [[NSUserDefaults standardUserDefaults] synchronize];  
    } 

我一直在爭奪這個問題了幾天,沒有運氣。任何幫助將不勝感激!謝謝。

回答

0

而不是在decodeRestorableStateWithCoder中設置UI對象:使用成員變量。

然後在viewWillAppear:使用成員變量,如果它已被設置,否則使用NSUserDefault的值。