2011-09-30 19 views
1

我創建了一個簡單的項目,帶有一個「+」和「 - 」按鈕,用於在label中增加或減少numberregisterDefaults保存數

我想測試registerDefaults方法,但是如果我點擊「home」按鈕,然後從模擬器(使用我的應用程序的圖標)返回項目,則屏幕上的數字仍然相同。

如何使用此示例測試用戶設置?或者是模擬器的東西,或者如果我使用設備並等待內存警告方法自動刷新項目,它會工作,然後它會工作?

這裏有點我的代碼:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
    self.window.rootViewController = self.viewController; 
    [self.window makeKeyAndVisible]; 

    NSNumber *testValue = [[NSUserDefaults standardUserDefaults] objectForKey:@"kRestore"]; 
    if (testValue){ 
     NSLog(@"already"); 
     viewController.myNum = (int)testValue; 
    } else { 
     NSLog(@"empty"); 
     viewController.myNum = 0; 
    } 

    return YES; 
} 


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

    NSNumber *num = [NSNumber numberWithInt:viewController.myNum]; 

    NSDictionary *savedNumber = [NSDictionary dictionaryWithObject:num forKey:@"kRestore"]; 
    [[NSUserDefaults standardUserDefaults] registerDefaults:savedNumber]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 

    NSLog(@"ok resign active"); 
} 

感謝

回答

1

applicationWillResignActive中調用-registerDefaults沒什麼意義。請參閱我的答案,瞭解registerDefaults的工作方式:How to register user defaults using NSUserDefaults without overwriting existing values?

您可以使用它來設置默認值。要保存非默認值但用戶首選項的值,請使用提供的各種-set..方法。

+0

謝謝,我不明白你是如何使用它的:你使用'registerDefaults'來保存plist文件到磁盤上(註冊...),但是你什麼時候把'number'保存到plist文件中?另外,你的意思是'Defaults.plist'是一個已經由xcode創建的默認文件,或者我可以將它命名爲'def.plist',並且只需在字典中創建一個帶有數字的'NSNumber'行(在plist中) ?謝謝,對不起,我還不熟悉這種東西;) – Paul

+0

不,registerDefaults'用於設置默認默認值:當用戶還沒有改變他的設置時,應用程序使用什麼。鏈接答案中的plist文件是我自己創建的文件,可以很容易地將所有這些設置集中在一個地方。你可以將它命名爲任何你喜歡的東西,但沒有什麼意義。 –

1

嘗試將viewController.myNum = [testValue intValue];,而不是使用(int)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
    self.window.rootViewController = self.viewController; 
    [self.window makeKeyAndVisible]; 
    NSNumber *testValue = [[NSUserDefaults standardUserDefaults] objectForKey:@"kRestore"]; 
    if (testValue){ 
     NSLog(@"already"); 
     viewController.myNum = [testValue intValue]; 
    } else { 
     NSLog(@"empty"); 
     viewController.myNum = 0; 
    } 
    return YES; 
} 

然後,只需使用setObject:forKey:像這樣:

- (void)applicationWillResignActive:(UIApplication *)application { 
    NSNumber *num = [NSNumber numberWithInt:viewController.myNum]; 
    [[NSUserDefaults standardUserDefaults] setObject:num forKey:@"kRestore"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
    NSLog(@"ok resign active"); 
} 
1

試着改變你的applicationWilLResignActive:方法:

NSNumber *num = [NSNumber numberWithInt:viewController.myNum]; 

[[NSUserDefaults standardUserDefaults] setObject:num forKey:@"kRestore"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

而且,你不能施放一個NSNumber實例爲int。在您的應用程序中:didFinishLaunchWithOptions:方法,將(int)testValue更改爲[testValue intValue]。