2012-10-03 136 views
1

我有關於如何/在那裏我可以救我NSUserDefaultsapplicationDidEnterBackgroundapplicationWillTerminate,我需要在用戶退出應用程序從另一個UIViewController救我NSArray計數NSUserDefaults或者進入後臺的一個問題。但我不知道我是否會保存正確的integer,因爲我在UIView上刪除了NSArray計數。 我不能將它保存在viewDidLoadviewDidAppear。希望有人會幫助。謝謝。節省NSUserDefaults的

+0

是否使用多個線程比? – TheAmateurProgrammer

+0

@theAmateurProgrammer no。 – Bazinga

回答

1

如果你需要從另一個ViewController保存,那麼它最好在你的AppDelegate中添加NSMutableArray。每當您刪除或添加對象,然後保存陣列的數量,因爲它會覆蓋這樣的:

[[NSUserDefaults standardUserDefaults] setInteger:[yourArray count] forKey:@"Count"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

檢索像這樣:

NSInteger count = [[NSUserDefaults standardUserDefaults] integerForKey:@"Count"]; 

編輯synchronize:寫入任何修改持久域到磁盤並將所有未修改的持久域更新爲磁盤上的內容。

參考NSUserDefaults_Class如明確規定被稱爲perodically,我們不必等待他們的呼叫

+0

它的更新是在數組上添加和刪除數組。我會把保存在每個部分的NSUserDefaults中? – Bazinga

+0

當然不要每次都調用同步。你可能根本不需要調用同步,但在內存壓力下死亡可能會讓iOS變得更加棘手。 –

+0

@Catfish_Man請參閱[NSUserDefaults_Class(https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/Reference/Reference.html),因爲它明確規定被perodically我們叫不必等待他們的電話 –

0

在你的AppDelegate類即創建NSMutableArray的伊娃的屬性創建所需的NSMutableArray,那麼以後就可以更新,添加,刪除其內容在任何classes.Thus的你將得到的陣列在的appDelegate功能本身和數組數應該是準確的applicationDidEnterBackground和applicationWillTerminate通知功能算..

在yourAppDelegate.h

創建..

@interface yourAppDelegate : UIResponder <UIApplicationDelegate>{ 
    NSMutableArray *myArray; 
    } 
@property(nonatomic,strong)NSMutableArray *myArray; //replace strong by retain if ios <5 

在yourAppDelegate.m

@synthesize myArray的;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary * 
)launchOptions{ 
    self.myArray = [NSMutableArray array]; 
} 

進一步在appDelegate.m您需要的功能文件

- (void)applicationWillTerminate:(UIApplication *)application 
{ 
[[NSUserDefaults standardDefaults]setValue:[NSNumber numberWithInt:[self.myArray count] forKey:@"myOwnKey"]]; 
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 
} 

的情況下,如果你想將對象添加到這個陣列中的任何其它類只需要創建yourAppDelegate的委託。

例如,在A級viewDidLoad中,

-(void)viewDidLoad{ // assuming viewController A 

YourAppDelegate *appDelegate = (YourAppDelegate *)[[UIApplicatio sharedApplication]delegate]; 
[appDelegate.myArray addObject:@"1232"]; 
} 
0

您可以使用此代碼值保存到NSUserDefaults

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
[defaults setObject:yourArray forKey:@"YourKey"] 
[defaults synchronize]; 
0

的具體使用NSUserDefault檢查這個

  • [[NSUserDefaults standardUserDefaults] setBool:<#(BOOL)#> forKey:<#(NSString *)#>] ,這是布爾你一個添加setInt/setFloat/SetDouble etc甚至ObjectiveCobjectssetValue/setObject

    [[NSUserDefaults standardUserDefaults] setValue:<#(id)#> forKey:<#(NSString *)#>]; 
    [[NSUserDefaults standardUserDefaults] setObject:<#(id)#> forKey:<#(NSString *)#>]; 
    
  • 若要檢索您可以使用gettersboolForKey[[NSUserDefaults standardUserDefaults] boolForKey:<#(NSString *)#>]intForKey etc.值。

  • 使用removeObjectForKey刪除對象。