Могу ли я вызвать или запустить основной контекст основных данных (viewContext) из фонового потока? - PullRequest
0 голосов
/ 10 апреля 2019

Я использую только основной контекст основных данных в своем приложении. Я знаю, что основной контекст может быть запущен только основной поток. Однако, когда я обновляю основной контекст внутри фонового потока, я не сталкиваюсь с каким-либо сбоем.

    //Cloudkit operation
 let zoneOperation = CKFetchRecordZoneChangesOperation(recordZoneIDs: zonesIDs, optionsByRecordZoneID: [zonesIDs[0]: options])

 zoneOperation.recordChangedBlock = { (record) in

// This is background thread
 print("Record has changed")
    let date = record["date"] as! Date

//Fetching Managed Object Context from Coredata (Main Context)
if let migraine = migraine(OnDate: date, inContext: self.persistentContainer.viewContext) {
migraine.date = date
saveData(inContext: self.persistentContainer.viewContext)
}
}

Как мне выполнить сохранение основного контекста Coredata в фоновом потоке без сбоев?

1 Ответ

2 голосов
/ 10 апреля 2019

Используйте perform(_:) или performAndWait(_:), чтобы обеспечить изменение контекста в потоке, к которому относится контекст.

persistentContainer.viewContext.performAndWait { 
  self.saveData(inContext: persistentContainer.viewContext)
}

Вы также можете сделать что-то подобное с

persistentContainer.performBackgroundTask { context in
  // Do stuff on this context and arrange for the changes
  // to be merged back to the view context. 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...