NSUserDefaults不保存在表格单元格中

时间:2012-02-22 01:04:46

标签: objective-c ios cocoa-touch nsuserdefaults

当我用表格中的titlestring替换@"hello"时,单元格显示空白,如果我离开你好,一切正常,包括“detailsstring”。我不知道为什么它这样做,因为detailsstring设置与titlestring完全相同。 这是代码: 在.m文件中我有

@synthesize  detailsstring;
@synthesize  titlestring;

并且它在.m中的所有定义都相同。我也有这个:

- (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"];
}

我做错了什么?

1 个答案:

答案 0 :(得分: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"]);