let bgContext = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
let moc = appDelegate.coreData.persistentContainer.viewContext
bgContext.parent = moc
bgContext.perform({
let fetchedResultController: NSFetchedResultsController<ReservationsEntity>
let request: NSFetchRequest<ReservationsEntity> = ReservationsEntity.fetchRequest()
let sort = NSSortDescriptor(key: #keyPath(ReservationsEntity.reservedDate), ascending: true)
request.sortDescriptors = [sort]
request.predicate = NSPredicate(format: "isSynced == %@", NSNumber(value: false))
fetchedResultController = NSFetchedResultsController(fetchRequest: request, managedObjectContext: moc, sectionNameKeyPath: nil, cacheName: nil)
do{
try fetchedResultController.performFetch()
for reservationEntity in fetchedResultController.fetchedObjects!{
print(reservationEntity.isSynced!)
let params = BaseViewController.getReservationDictionaryForOffline(reservation: reservationEntity)
ServerCalls.addReservationToServer(parametersForReservation: params, kindOfScreen: 0, completionHandler: { (response) in
print(reservationEntity.isSynced!)
reservationEntity.isSynced = true
})
}
} catch{
}
})
Проблема : Здравствуйте! У меня есть сценарий использования AddReservation
, в котором я добавляю запись в объект CoreData с именем ReservationsEntity
с атрибутом isSynced
в false
изначально.Я также делаю серверный вызов одновременно, и как только серверный вызов возвращается, я пытаюсь обновить флаг isSynced
до true
.Но после того, как сервер вернул вызов, мой объект CoreData становится нулевым.
Согласно приведенному выше коду, сначала print(reservationEntity.isSynced!)
показывает false
в отладчике.Когда я пытаюсь распечатать / получить доступ к reservationEntity
после возврата ServerCalls.addReservationToServer
, приложение завершает работу, когда объект reservationEntity
становится nil
.
Последние несколько дней я пытался это исправить, пытаясь разными способами, но безрезультатно.Какую ошибку я здесь делаю?