gpt4 book ai didi

ios - 在 Core Data 中同时保存上下文在 iOS7 中不起作用

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

我从几个异步调用的 Web 服务中获取了一些数据。当我收到他们的回复时,我需要使用收到的信息在核心数据中创建和保存相应的实体。由于服务回调是异步的,并且当我收到另一个服务时,我可能已经保存了其中一个服务的响应,因此我编写了如下几个方法:

- (void)createEntity
{
@autoreleasepool {
dispatch_queue_t queue = dispatch_queue_create(kSaveQueue, NULL);
dispatch_async(queue, ^{
// Context for background operations
NSManagedObjectContext *tmpContext = [[NSManagedObjectContext alloc] init];
NSPersistentStoreCoordinator *mainThreadContextPSC = [self.context persistentStoreCoordinator];
[tmpContext setPersistentStoreCoordinator:mainThreadContextPSC];

@try {
// Parse service response and create entity

// Save context
[tmpContext save:nil];

dispatch_async(dispatch_get_main_queue(), ^{
// Notify end of operation
});
}
@catch (NSException *ex) {
NSLog(@"exception: %@", [ex description]);
}
});
}
}

实际上,我有两种这样的方法,一种用于EntityA,另一种用于EntityB,当我收到相应的服务响应(serviceA,serviceB)时,每个方法都会被调用。在我的测试中,我看到两个 tmpContext 始终保存在 iOS 8 中,但在 iOS 7 中,只有第一个调用被保存,第二个实体不会持久保存在 Core Data

为什么这在 iOS 8 中有效,但在 iOS 7 中却无效?

提前致谢

最佳答案

您使用 alloc init 创建上下文然后分配持久存储协调器的方法已被弃用。

相反,使用工厂方法 initWithConcurrencyType: 并为后台线程传递 NSPrivateQueueConcurrencyType。通过调用 setParentContext: 与父上下文相关联。

您还可以通过利用上下文的 performBlockperformBlockAndWait API 而不是下降到 GCD 来执行后台操作。

关于ios - 在 Core Data 中同时保存上下文在 iOS7 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30012990/

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