試試這個:
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對象(例如,如果您有1000個對象,則將它們分塊爲10個100個對象的數組,並在10個子上下文中解析10個數組的異步)。
希望它有幫助。
您可以使用dispatch_async,performBlock(在managedContext中)。但是,不要每次都保存上下文,一旦完成所有插入操作,請執行保存上下文。 –
我的問題有點不同....我想做同時插入。例如我想要在10個不同的隊列中並行插入100條記錄。 –
從這篇文章(https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/Concurrency.html)看來,您似乎需要爲每個隊列使用不同的專用隊列上下文。如果你得到它的工作,我想知道底層數據庫是否允許並行更新或自己序列化。 –