gpt4 book ai didi

ios - 在 iOS 中同时插入 CoreData

转载 作者:行者123 更新时间:2023-11-30 13:28:07 24 4
gpt4 key购买 nike

假设我有来自 Web 服务 API 的数千条记录,并且我想将这些记录添加到 privateContext 的核心数据中。我怎样才能同时而不是线性地做到这一点。

我可以应用诸如 dispatch_apply 之类的东西并运行

let entity:NSEntityDescription =  NSEntityDescription.entityForName(entityName,
inManagedObjectContext:managedContext)!
let managedObject:NSManagedObject = NSManagedObject(entity: entity,
insertIntoManagedObjectContext: managedContext)

同时?

最佳答案

试试这个:

func persistAsyncInContext<T:AnyObject>(parentContext:NSManagedObjectContext , objetcsFromJSON:[T] , completion:()->Void){

let workQ = dispatch_queue_create(nil, DISPATCH_QUEUE_CONCURRENT)
let workGroup = dispatch_group_create()

for objectFromJSON in objetcsFromJSON{

dispatch_group_enter(workGroup)
let workerChildMoc = NSManagedObjectContext(concurrencyType: NSManagedObjectContextConcurrencyType.PrivateQueueConcurrencyType)
workerChildMoc.parentContext = parentContext
workerChildMoc.performBlock{

let managedObject = NSEntityDescription.insertNewObjectForEntityForName("entityName", inManagedObjectContext: workerChildMoc)
//if objectFromJSON is also an array then loop it and move the line above that creates new object into the loop.

do
{
try workerChildMoc.save()
}
catch
{
//Handle error
}
defer{
dispatch_group_leave(workGroup)
}
}
}

dispatch_group_notify(workGroup, dispatch_get_main_queue()) { () -> Void in
do{
try parentContext.save()
}
catch
{
//Handle error
}
//End of persist
completion()
}
}

这会在子上下文中创建每个对象并保存它们,但考虑到对大量对象执行此操作效率不高,您可能需要创建 JSON 对象的 2D 数组(例如,如果您有 1000 个对象然后将它们分成 10 个包含 100 个对象的数组,并在 10 个子上下文上异步解析这 10 个数组)。

希望有帮助。

关于ios - 在 iOS 中同时插入 CoreData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36888576/

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