2010-01-26 45 views
2

我正在創建一個簡單的應用程序來保存個人姓名和與此人關聯的號碼。我創建了一個類人是這樣的:退出時保存當前狀態,重新打開應用程序時自動重新加載

@interface Person : NSObject { 
    NSString *name; 
    NSInteger serialNumber; 
} 

在mainViewController,我創建了一個輸入文本字段輸入姓名,然後自動將編號分配給個人,還有2的UILabel展現輸入的名稱和serialNumber。

但是,退出應用程序並重新打開後,所有標籤都被清除。我試圖做的是保持這些變量,因爲它們退出應用程序並顯示在標籤中時。因此,我在應用程序委託中創建了2個變量,並嘗試使用applicationWillTerminate:在應用程序委託中進行保存。在mainViewController我每次我在一個新的名字輸入時間後,插入這些代碼:

NameAppDelegate *appDelegate = (NameAppDelegate *)[[UIApplication sharedApplication] delegate]; 
appDelegate.lastPerson.name = aPerson.name; 
//currentPerson is an instance variable of the app delegate 
appDelegate.lastPerson.serialNumber = aPerson.serialNumber; 
NSLog(@"aPerson.serialNumber = %i", aPerson.serialNumber); 
NSLog(@"appDelegate.lastPerson.serialNumber = %i", appDelegate.lastPerson.serialNumber); 

然而,每一個我輸入一個新的名字時,控制檯顯示,aPerson.serialNumber的變化(這是在mainViewController)但不是appDelegate.lastPerson.serialNumber(它總是等於零)。

上面的代碼有什麼問題嗎?

回答

2

容易做到NSUserDefaults,這裏的一些代碼,讓你開始:

- (void)applicationDidFinishLaunching:(UIApplication *)application { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    appDelegate.lastPerson.name = [defaults stringForKey:@"Name"]; 
    appDelegate.lastPerson.serial = [defaults stringForKey:@"Serial"]; 

    [window addSubview:[flipViewController view]]; 
    [window makeKeyAndVisible]; 
} 

-(void)applicationWillTerminate:(UIApplication *)application { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setString:appDelegate.lastPerson.name forKey:@"Name"]; 
    [defaults setString:appDelegate.lastPerson.serial forKey:@"Serial"]; 
    [defaults synchronize];  
} 

可以檢查任何字符串是零加載後將顯示沒有存儲的值,然後應該詢問用戶輸入。

+0

謝謝大衛。但是,我應該在appDeleagate.m中還是在mainViewController.m中添加這些代碼? (我在mainViewController.m中執行大部分程序) 另外,我有一個問題,appDelegate.lastPerson.name和appDelegate.lastPerson.serial不會像我期望的那樣更改。即使分配了一些內容給它們,它們也總是顯示一個(空)值。 – Anthony 2010-01-26 05:53:25

+0

在AppDelegate中。 DidFinishLaunching應該已經在那裏,所以你不需要複製整個事情,只需要重要的位。你可以在WillTerminate中複製,它應該可以工作,但是你必須改變appDelegate變量,因爲它顯然沒有正確設置。 – 2010-01-26 05:56:34

+0

好吧,我明白了。但我在這裏有另一個問題。 appDelegate.lastPerson.name和appDelegate.lastPerson.serial不會按我的預期更改。所以最終我無法保存默認設置,即使我有這些代碼。你有什麼想法,爲什麼我不能用我引用的上述代碼更新它們? – Anthony 2010-01-26 06:02:08

相關問題