【发布时间】:2014-09-18 23:49:00
【问题描述】:
我有一个返回共享实例的 DataManager 类:
+ (DataManager *)sharedInstance;
{
static DataManager *sharedInstance = nil;
static dispatch_once_t pred;
dispatch_once(&pred, ^{
sharedInstance = [[DataManager alloc] init];
});
return sharedInstance;
}
在这里我跟踪我的 managedObjectContext、managedObjectModel、persistentStoreCoordinator。
我还有一种方法可以取出项目进行展示:
- (NSArray *)getItems
{
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Item"];
return [[self managedObjectContext] executeFetchRequest:fetchRequest error:nil];
}
现在在我的主应用程序中,当我调用此 getItems 然后单独修改项目时,我有一个视图控制器。例如设置 item.itemName = @"testName";然后调用我的保存方法。
我还有一个 iOS 8,在 TodayViewController 中我还调用了 getItems 方法。我有一个检测 managedObjectContext 保存的 NSNotification。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refetchItems) name:NSManagedObjectContextDidSaveNotification object:[[DataManager sharedInstance] managedObjectContext]];
这些重新获取的项目确实会被调用,但会返回过时的 NSManagedObjects。因此,例如 itemName 没有更改为 @"testName"。
我哪里错了?如果您需要查看任何其他代码,请告诉我。
谢谢!
【问题讨论】:
-
您的应用和小部件在不同的进程中运行。如果您的应用更改了核心数据存储,您的小部件将不会收到应用发送的通知。
-
@quellish 那么检测变化的最佳方法是什么?
-
我也有同样的问题,但也没有找到解决办法。只有我能想到的,就是“破坏”上下文并重新创建它。
-
您确定您没有听到任何
DidChange通知吗? -
@LeoNatan 我实际上听到了 DidChange 通知。只是重新获取不会让我得到更新的对象。奇怪的是,它确实检测到我添加的新对象或我删除了一些对象。
标签: ios objective-c ios8 ios-app-extension notificationcenter