2012-02-22 45 views
0

當我用表標題字符串替換@"hello"時,單元格顯示空白,如果我留下你好,一切正常,包括「detailsstring」。我不知道爲什麼它會這樣做,因爲detailsstring的設置與titlestring完全相同。 這裏是代碼: 在.m文件我有NSUserDefaults不保存在表單元格

@synthesize detailsstring; 
@synthesize titlestring; 

,這一切都在.M我有這個問題,以及定義在.H相同:

- (void)viewDidLoad{   
    titlestring =[[NSUserDefaults standardUserDefaults] objectForKey:@"titletext"]; 
    detailsstring = [[NSUserDefaults standardUserDefaults] objectForKey:@"details"]; 

    tabledata = [[NSArray alloc] initWithObjects:@"hello", nil]; 
    tablesubtitles = [[NSArray alloc] initWithObjects:detailsstring, nil]; 
    [super viewDidLoad]; 
} 

現在,我將這些Userdefaults保存在另一個控制器中。下面是不同視圖控制器中的保存按鈕動作:

- (IBAction)saveButton:(id)sender { 
    NSUserDefaults *titletext = [NSUserDefaults standardUserDefaults]; 
    [titletext setObject:titleTextfield.text forKey:@"titletext"]; 

    NSUserDefaults *details = [NSUserDefaults standardUserDefaults]; 
    [details setObject:detailstextfield.text forKey:@"details"]; 

    NSUserDefaults *categoryUser = [NSUserDefaults standardUserDefaults]; 
    [categoryUser setInteger:selectedCategory forKey:@"category"]; 
} 

我在做什麼錯?

+0

是否使用ARC? – ThomasW 2012-02-22 01:13:04

+0

另外,你如何使用桌面字幕?有沒有什麼可以提及的呢? – ThomasW 2012-02-22 01:17:59

+0

'[super viewDidLoad]'應該是您應該在viewDidLoad方法上調用的第一件事。這不會解決你遇到的問題,但這絕對是你不應該做的。 – 2012-02-22 01:21:23

回答

3

首先,NSUserDefaults的一個實例對於所有三種修改都是足夠的。要立即將更改推送到文件系統,可以撥打[userDefaults synchronize];。否則,不能保證您的更改即刻保存。如果您不能等待更改被保存,Apple建議只調用此方法。

- (IBAction)saveButton:(id)sender { 
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
    [userDefaults setObject:titleTextfield.text forKey:@"titletext"]; 
    [userDefaults setObject:detailstextfield.text forKey:@"details"]; 
    [userDefaults setInteger:selectedCategory forKey:@"category"]; 
    [userDefaults synchronize]; 
} 

在你viewDidLoad:方法,嘗試輸出保存的值來測試您的應用程序的完整性:

NSLog(@"%@", [[NSUserDefaults standardUserDefaults] objectForKey:@"details"]); 
+0

此外,如果您只是在測試應用程序並很早退出應用程序,則很可能會在應用程序正在運行的短時間內保存該應用程序。我必須親自處理。 – fscheidl 2012-02-22 01:24:52

+0

'同步'只需將結果寫入磁盤(適用於iOS的閃存)。你不需要調用'synchronize'來讀取你剛剛設置爲用戶默認值的值。 – 2012-02-22 01:49:27

+0

那麼,如果一開始沒有任何東西被保存到磁盤中,那麼您將如何能夠讀取用戶的默認值? – fscheidl 2012-02-22 01:51:53