我有一个DataManager类返回的共享实例:核心数据的iOS 8今天的Widget问题
+ (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方法。我有一个NSNotification检测managedObjectContext保存。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refetchItems) name:NSManagedObjectContextDidSaveNotification object:[[DataManager sharedInstance] managedObjectContext]];
这些被重新调取的项目不会被调用,但会返回过期的NSManagedObjects。因此,例如,itemName并未更改为@“testName”。
我哪里错了?如果您需要查看其他代码,请告知我们。
谢谢!
你的应用程序,你运行的小部件在不同的过程。如果您的应用更改了核心数据存储,那么您的小部件将不会收到该应用发送的通知。 – quellish 2014-09-19 01:54:56
@quellish然后检测变化的最佳方式是什么? – Stephen 2014-09-19 08:10:26
我有完全相同的问题,但还没有找到解决方案。只有我能想到,就是“去创造”背景并重新创造它。 – 2014-09-20 17:11:30