1

保存managedObjectContext似乎吃NSUserDefaultmanagedObjectContext似乎删除我NSUserDefault

NSString *defaultSiteUrl = [[NSUserDefaults standardUserDefaults] objectForKey:kSelectedSiteUrlKey]; 
NSLog(@"the default site url is: %@", defaultSiteUrl); 

if (![[managedObjectContext] save:&error]) { 
    NSLog(@"Error saving entity: %@", [error localizedDescription]); 
} 

NSString *defaultSiteUrl2 = [[NSUserDefaults standardUserDefaults] objectForKey:kSelectedSiteUrlKey]; 
NSLog(@" the default site url is: %@", defaultSiteUrl2); 

导致控制台:

2011-05-10 15:26:40.710 Moodle[44566:207] the default site url is: http://jerome.moodle.local/~jerome/Moodle_iPhone 
2011-05-10 15:26:40.717 Moodle[44566:207] the default site url is: (null) 

什么会导致这个问题? 以何种方式将NSUserDefaults与ManagedObjectContext相关?

注:

  • 为了让你知道我的申请:我是一个深化发展的Moodle的应用程序。这段代码在显示课程列表的屏幕上。当我在“站点设置”屏幕上设置userdefault时,我使用[[NSUserDefaults standardUserDefaults]同步]。所以我猜这是很好的保存

  • 如果在设置用户默认设置后直接进入课程列表屏幕之前重新启动模拟器,那么代码工作(用户默认不会被“save manageObjectContext”删除)。

+0

你用什么代码来设置用户默认的密钥?你确定你没有线程调用覆盖设置并同步后台的默认值吗? – marzapower 2011-05-10 09:42:00

+0

'[[NSUserDefaults standardUserDefaults] setObject:[settingsSiteViewController.site valueForKey:@“url”] forKey:kSelectedSiteUrlKey]; [[NSUserDefaults standardUserDefaults] synchronize];'这非常简单。只有两个地方改变这个用户的默认值。我一直会去看看,但我还没有明白。 – 2011-05-23 08:12:48

回答

2

必须初始化由[NSUserDefaults的registerDefaults:的appdefaults]的数值NSUserDefaults的使用同步进行instiliaztioan方法可能会破坏你的用户默认设置,注意,它无关,与核心数据

+0

感谢Dongsheng,registerDefaults似乎确实解决了这个问题。我仍然想知道“save manageObjectContext”后面发生了什么:) – 2011-05-30 09:46:13