У меня есть класс 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, а затем изменить элементы по отдельности. Так, например, set 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
@quellish, что является лучшим способом для обнаружения изменений? – Stephen
У меня точно такая же проблема, но и не нашли решения. Только я могу думать о том, что нужно «разрушить» контекст и создать его снова. –