gpt4 book ai didi

iOS - 托管对象上下文异常

转载 作者:行者123 更新时间:2023-11-29 00:33:46 25 4
gpt4 key购买 nike

当我启用异常断点时,我在下面的这段代码中得到了一个异常。

我不知道为什么,但每次我启动应用程序时都会触发断点。

关于异常断点,我有什么不明白的地方吗?或者我应该调查托管对象上下文吗?

编辑:

代码示例:

-(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 block 的方式吗?

异常断点在这一行触发:

success = [self.managedObjectContext save:&saveError];

我在这篇文章中看到我们可以忽略某些异常。 ignore exception

忽略 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 来确保托管对象上下文仅由与 managedObject 属于同一队列的线程访问关联上下文。

关于iOS - 托管对象上下文异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41119418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com