大佬教程收集整理的这篇文章主要介绍了ios – 如何忽略NSManagedObjectContextWillSaveNotification中mergeChangesFromContextDidSaveNotification中的更改,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
然后我使用UI对mainMOC进行一些更改,并监听NsmanagedObjectContextWillSaveNotification.通知已发布,但它不仅包含我所做的编辑,还包含使用mergeChangesFromContextDidSaveNotification从PrivateMOC合并的对象.
有没有办法在后续的contextDidChange通知中忽略从另一个上下文合并到mainContext中的更改?
这是设置:
- (void) loadData { privateContext = [[NsmanagedObjectContext alloc] initWithConcurrencyType: NSPrivateQueueConcurrencyType]; privateContext.persistentStoreCoordinator = self.mainContext.persistentStoreCoordinator; [[NsnotificationCenter defaultCenter] addObserver:self SELEctor:@SELEctor(contextWillSave:) name:NsmanagedObjectContextWillSaveNotification object: self.mainContext]; NsmanagedObject *object = [NSEntityDescription insertNewObjectForEntityForName:record.recordType inManagedObjectContext: self.privateContext]; // fill in object if ([self.privateContext hasChanges]) { [self savePrivateContextAndMergeWithMainContext: self.privateContext]; } } - (void) savePrivateContextAndMergeWithMainContext: (NsmanagedObjectContext *) privateContext { [[NsnotificationCenter defaultCenter] addObserver:self SELEctor:@SELEctor(privateContextDidChange:) name:NsmanagedObjectContextDidSaveNotification object:privateContext]; __block NSError *error = nil; [privateContext performBlockAndWait:^{ NSLog(@"PrivateContext saved"); [privateContext save:&error]; }]; [[NsnotificationCenter defaultCenter] removeObserver:self name:NsmanagedObjectContextDidSaveNotification object:privateContext]; if (error) { NSLog(@"error = %@",error); } } - (void) privateContextDidChange: (Nsnotification *) notification{ [self.mainContext performBlockAndWait:^{ NSLog(@"merged into mainContext"); [self.mainContext mergeChangesFromContextDidSaveNotification:notification]; }]; }
这样可以正常工作并保存私有上下文并且合并到mainContext中不会触发contextWillSave通知.但是,在从UI(在主MOC上)编辑数据时,会触发通知并包含先前使用私有MOC保存的数据.
希望很清楚.如果我应该包含其他任何内容,请告诉我.
– 更新 –
似乎问题是专门从私有上下文中删除对象.从私有上下文中删除,并在主MOC上@L_455_0@mergeChangesFromContextDidSaveNotification后,mainMoc的deletedObjects集仍然@L_450_10@已删除的对象.私有上下文中的插入或更新不会发生这种情况.这在任何地方记录?可能的@L_262_12@是什么?
- (void) privateContextDidChange: (Nsnotification *) notification{ if (notification.object == PrivateMOC) { [self.mainContext performBlockAndWait:^{ NSLog(@"merged into mainContext"); [self.mainContext mergeChangesFromContextDidSaveNotification:notification]; }]; } }
…其中privateMOC是对私有托管对象上下文的引用?
以上是大佬教程为你收集整理的ios – 如何忽略NSManagedObjectContextWillSaveNotification中mergeChangesFromContextDidSaveNotification中的更改全部内容,希望文章能够帮你解决ios – 如何忽略NSManagedObjectContextWillSaveNotification中mergeChangesFromContextDidSaveNotification中的更改所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。