CoreData с использованием NSBatchInsertRequest - PullRequest
5 голосов
/ 05 февраля 2020

Я пытаюсь вставить массив словаря в CoreData, используя NSBatchInsertRequest в соответствии с WWD C 2019 (https://developer.apple.com/videos/play/wwdc2019/230/). Значение insertResult равно nil, а мои 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'.

Ответы [ 2 ]

0 голосов
/ 08 апреля 2020

ваша линия let insertResult = try? moc.execute(insertRequest) as? NSBatchInsertRequest

должна быть: let insertResult = try? moc.execute(insertRequest) as? NSBatchInsertResult

0 голосов
/ 13 февраля 2020

Я думаю, что в разговоре WWD C есть ошибка. Попробуйте сделать это:

let insertRequest = NSBatchInsertRequest(entity: Client.entity(), objects: clients)
try! moc.execute(insertRequest)
try! moc.save()

Я использовал try! , чтобы увидеть любую ошибку. Вы можете изменить его

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...