managedObjectContext 似乎删除了我的 NSUserDefault

Posted

技术标签:

【中文标题】managedObjectContext 似乎删除了我的 NSUserDefault【英文标题】:managedObjectContext seems to delete my NSUserDefault 【发布时间】:2011-05-10 08:07:36 【问题描述】:

保存 managedObjectContext 似乎吃掉了 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 应用程序。这段代码位于显示课程列表的屏幕上。当我在“站点设置”屏幕上设置用户默认值时,我使用 [[NSUserDefaults standardUserDefaults] 同步]。所以我猜它保存得很好

如果我在设置用户默认值后直接进入课程列表屏幕之前重新启动模拟器,则这段代码可以正常工作(“保存 manageObjectContext”不会删除用户默认值)。

李>

【问题讨论】:

您使用什么代码在用户默认值中设置该键?您确定没有覆盖设置并在后台同步默认设置的线程调用吗? [[NSUserDefaults standardUserDefaults] setObject:[settingsSiteViewController.site valueForKey:@"url"] forKey:kSelectedSiteUrlKey]; [[NSUserDefaults standardUserDefaults] synchronize]; 这很简单。更改此用户默认值的地方只有两个。我继续看,但我还没有得到它。 【参考方案1】:

您必须通过 [NSUserDefaults registerDefaults:appDefaults] 初始化 NSUserDefaults 值,使用 instiliaztioan 的同步方法可能会破坏您的用户默认值,注意,与核心数据无关

【讨论】:

感谢东升,registerDefaults 似乎确实解决了这个问题。我仍然想知道“保存 manageObjectContext”背后发生了什么:)

以上是关于managedObjectContext 似乎删除了我的 NSUserDefault的主要内容,如果未能解决你的问题,请参考以下文章

您是不是需要保存 ManagedObjectContext 以使 Nullify 删除规则影响目标实体?

从 UITableView NSMutableArray 和 ManagedObjectContext 中删除行

删除对属于 ManagedObjectContext 的 ManagedObjects 的所有引用

如何从 managedObjectContext 中删除未保存的对象

ManagedObjectContext performBlock(AndWait) 死锁

在 SceneDelegate SwiftUI 上设置 managedObjectContext