2012-02-22 73 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