当我启用异常断点时,我在下面的代码中遇到了异常。
我不知道为什么,但是每次启动该应用程序时,都会触发断点。
关于异常断点我是否不了解,还是应该对托管对象上下文进行调查?
编辑 :
代码示例:
-(void)parseJson
{
_resultArray = [[NSMutableArray alloc]init];
BOOL success = YES;
NSError *saveError = nil;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mergeCoreDataChangesToMainContext:) name:NSManagedObjectContextDidSaveNotification object:self.managedObjectContext];
[self doCustomActionBeforeParsing];
for (NSDictionary* entries in _jsonArray) {
id aMTLObject = [[MTLDatabaseManager sharedInstance] mantleObjectModel:_modelClass anItem:entries];
[self doCustomActionBeforeCoreDataInsertionOfMantleObject:aMTLObject];
[[MTLDatabaseManager sharedInstance] insertMantleObjectInContext:aMTLObject aManagedObjectContext:self.managedObjectContext];
if ([self isCancelled])
break;
}
if (![self isCancelled] && [self.managedObjectContext hasChanges]) {
[self.managedObjectContext performBlockAndWait:^{
success = [self.managedObjectContext save:&saveError];
}];
}
if (![self isCancelled]) {
dispatch_async(dispatch_get_main_queue(), ^{
if (success) {
[self.delegate parserDidFinishParsingOperation:self fromUrl:self.dataUrl];
} else {
[self.delegate parserOperation:self didFailParsingOperationWithError:saveError fromUrl:self.dataUrl];
}
});
}
[[NSNotificationCenter defaultCenter] removeObserver:self name:NSManagedObjectContextDidSaveNotification object:self.managedObjectContext];
}
这是您使用performAndWait块的方式吗?
异常断点在此行触发:
success = [self.managedObjectContext save:&saveError];
我在这篇文章中看到,我们可以忽略某些例外。忽略异常
忽略CoreData异常是一种好习惯吗?(我猜不是)。
尝试包装
self.managedObjectContext.performAndWait {
//all your processing managed objects
//finally once done
try! self.managedObjectContext.save()
}
可能会发生什么,
您可能正在访问managedObjects,或者正在调用managedObjectContext,保存在线程中,该线程可能与self.managedObjectContext所关联的队列不在同一个队列中。
从iOS 5开始,当您使用MainQueue并发或ProvateQueue并发模型时,可以使用ManagedObjectContext的perform或performAndWait来确保仅由与托管对象上下文相关联的同一个队列中的线程访问托管对象上下文。 。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句