gpt4 book ai didi

ios - 尝试清除和保存不同的上下文时访问错误

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

我需要定期更新我使用 Core Data 保存的数据。我从对 REST 服务的异步调用中获取此类数据。为了首先检索所有数据,我在私有(private)队列中创建了一个完整的核心数据堆栈,然后执行以下操作:

- (void)updateDataFromServices
{
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
self.dataUpdatePrivateContext = [MyCoreDataStackHelper getPrivateContext];

if (self.dataUpdatePrivateContext != nil) {
[self.dataUpdatePrivateContext performBlockAndWait: ^{
// Asynchronous operations
[self callService1];
[self callService2];
[self callService3];
}];
}
}

在调用的每个服务的回调中,我检查其余服务是否也已完成,如果所有服务都已完成,我调用一个方法 (manageInfoUpdate) 来处理数据之间的更新我在我的主上下文中(在主线程中)和我现在在私有(private)上下文中(在私有(private)队列中)的数据:

- (void)manageInfoUpdate
{
const char* UpdateInfoQueue = "com.comp.myapp.updateinfo";
dispatch_queue_t queue = dispatch_queue_create(UpdateInfoQueue, NULL);
dispatch_async(queue,^{

// Handle updates from private context:
// Here I compare objects in the main context with the objects
// in the private context and I delete objects from both
// by calling:

[mainContext deleteObject:object];
[self.dataUpdatePrivateContext deleteObject:object];
// This seems to work...

// Save and clear private context
[self saveContext:self.dataUpdatePrivateContext];
[self clearContext:self.dataUpdatePrivateContext];

dispatch_async(dispatch_get_main_queue(), ^{
// Re-fetch from main context to get
// the updated data

// Save main context
[self saveContext:mainContext];

// Notify end of updates
});
});
}

我尝试在另一个异步线程中执行 manageInfoUpdate 操作。我在尝试清除/保存上下文时收到 EXEC_BAD_ACCESS 异常...有人可以帮我找出原因吗?

提前致谢

最佳答案

您不会因为在多线程环境中错误地使用 Core Data 而得到一个彻底的“错误”。应用有时会崩溃。

要确认您是否正确使用它,请在您的运行时参数中打开调试标志 com.apple.CoreData.ConcurrencyDebug 1。然后,每次您从错误的队列中触摸 MOC 或 MO 时,它都会崩溃。

就目前而言,您的代码在线程方面根本不正确。在一个队列上创建的 MO 只能从该队列访问。同样,为主队列配置的 MOC 必须在主队列上访问,而配置为专用队列的 MOC 必须在 ITS 专用队列上访问。

您的“UpdateInfoQueue”完全违反了线程规则。

打开调试标志,更正它向您显示的错误,您的保存问题将得到更正。

关于ios - 尝试清除和保存不同的上下文时访问错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32737893/

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