我想做的是:
我使用them
相反,当我试图保存数据时,我得到的是这个崩溃:
CoreData:错误:严重的应用程序错误。在核心数据更改处理过程中捕获了异常。这通常是NSManagedObjectContextObjectsDidChangeNotification.观察者中的一个bug。对象的持久存储无法从这个NSManagedObjectContext的协调器中用userInfo访问(null)
我总是使用单个NSManagedObjectContext,并且总是在主线程上读取和保存。
似乎切换NSPersistenStore在某种程度上扰乱了获取结果控制器。这是预期的行为还是我做错了什么?
发布于 2012-02-10 14:33:56
我不建议这样做。我会创建一个新的MOC与您的新持久存储,并放弃旧的MOC。
我想在某个时候你叫-[ManagedObjectContext reset]?在这样做之前,您必须放弃来自该上下文的所有托管对象。它们都会变得无效(这很可能是造成您崩溃的原因)。
您还应该看看How to force coredata to rebuild sqlite database model?。
发布于 2012-04-28 16:05:08
我也经历过同样的车祸。按照罗布的建议,每次打电话给removePersistentStore:时,我都会发布一个removePersistentStore:,而所有拥有NSFetchedResultController的ViewControllers现在都会自动取消本地NSFetchedResultsController。
即:
1-听取通知:
-(id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
// Custom initialization
[[NSNotificationCenter defaultCenter] addObserverForName:kNotificationDestroyAllNSFetchedResultsControllers object:nil queue:nil usingBlock:^(NSNotification *note) {
NSLog(@"[%@] must destroy my nsfetchedresultscontroller", [self class]);
[__fetchedResultsController release];
__fetchedResultsController = nil;
}];
}
return self;
}2-邮寄通知
for( NSPersistentStore* store in [self.persistentStoreCoordinator persistentStores] )
{
NSError *error;
NSURL *storeURL = store.URL;
[self.persistentStoreCoordinator removePersistentStore:store error:&error];
[[NSFileManager defaultManager] removeItemAtPath:storeURL.path error:&error];
/** ... side effect: all NSFetchedResultsController's will now explode */
[[NSNotificationCenter defaultCenter] postNotificationName:kNotificationDestroyAllNSFetchedResultsControllers object:self];
}发布于 2017-04-26 06:59:55
NSFetchedResultsController监视其关联的托管对象上下文中对象的更改,因此它可能监视过时的托管对象上下文中的对象更改。
当我在重置NSFetchedResultsController后重新创建NSPersistentStore时,这个问题得到了修复。
https://stackoverflow.com/questions/9229228
复制相似问题