Ios 使用NSBatchInsertRequest的CoreData
我正试图使用Ios 使用NSBatchInsertRequest的CoreData,ios,swift,xcode,core-data,nspersistentcloudkitcontainer,Ios,Swift,Xcode,Core Data,Nspersistentcloudkitcontainer,我正试图使用NSBatchInsertRequest根据WWDC 2019()在CoreData中插入字典数组。insertResult为零,我的CoreData为空 let modelURL = Bundle.main.url(forResource: "CoreDataPerformance", withExtension: "momd")! let model = NSManagedObjectModel(contentsOf: modelURL)! let container = NSP
NSBatchInsertRequest
根据WWDC 2019()在CoreData
中插入字典数组。insertResult为零,我的CoreData为空
let modelURL = Bundle.main.url(forResource: "CoreDataPerformance", withExtension: "momd")!
let model = NSManagedObjectModel(contentsOf: modelURL)!
let container = NSPersistentCloudKitContainer(name: "CoreDataPerformance", managedObjectModel: model)
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
try container.viewContext.setQueryGenerationFrom(.current)
let moc = container.viewContext
moc.automaticallyMergesChangesFromParent = true
moc.perform {
let insertRequest = NSBatchInsertRequest(entity: Client.entity(), objects: clients)
let insertResult = try? moc.execute(insertRequest) as? NSBatchInsertRequest
let success = insertResult?.resultType
print("RESULT STATUS: \(success)")
}
这是我在控制台中收到的错误:
2020-02-04 18:30:25.800705+0200 CoreDataPerformance[62836:778869] [error] warning: Multiple NSEntityDescriptions claim the NSManagedObject subclass 'CoreDataPerformance.Client' so +entity is unable to disambiguate.
CoreData: warning: Multiple NSEntityDescriptions claim the NSManagedObject subclass 'CoreDataPerformance.Client' so +entity is unable to disambiguate.
2020-02-04 18:30:25.800846+0200 CoreDataPerformance[62836:778869] [error] warning: 'Client' (0x600000c50bb0) from NSManagedObjectModel (0x600001877480) claims 'CoreDataPerformance.Client'.
CoreData: warning: 'Client' (0x600000c50bb0) from NSManagedObjectModel (0x600001877480) claims 'CoreDataPerformance.Client'.
2020-02-04 18:30:25.800940+0200 CoreDataPerformance[62836:778869] [error] warning: 'Client' (0x600000c589a0) from NSManagedObjectModel (0x600001861680) claims 'CoreDataPerformance.Client'.
CoreData: warning: 'Client' (0x600000c589a0) from NSManagedObjectModel (0x600001861680) claims 'CoreDataPerformance.Client'.
我认为WWDC的谈话有错误。尝试这样做:
let insertRequest = NSBatchInsertRequest(entity: Client.entity(), objects: clients)
try! moc.execute(insertRequest)
try! moc.save()
我用试试看这样我就可以看到任何错误。您可以更改它您的行
let insertResult=try?主运行中心执行(插入请求)为?NSBatchInsertRequest
应该是:
let insertResult=try?主运行中心执行(插入请求)为?NSBatchInsertResult
消除歧义的问题是因为在应用程序运行时,有多个核心数据堆栈处于打开状态。这是因为你有你的应用程序和测试堆栈吗?或者因为您的应用程序正在使用多个?错误CoreData:警告:多个NSEntityDescriptions声明NSManagedObject子类“CoreDataPerformance.Client”so+实体无法消除歧义。
表示您的模型中有多个实体使用客户端NSManagedObject
子类,应该只有一个
代码的另一个问题是,来自父级的automaticallyMergesChangesFromParent
无法处理批处理请求,因为未生成did save通知。您必须使用NSPersistentStoreRemoteChangeNotification
、NSPersistentHistoryChangeRequest
和mergeChangesFromContextDidSaveNotification
该技术在@21:57调用moc的四行中进行了说明。执行
。。。您是否尝试在不嵌入此执行闭包的情况下运行这些操作?即删除对perform
的调用?NSBatchInsertRequest将对象保存到持久存储中。我认为您不需要显式地保存上下文。