简体   繁体   English

在完成处理程序中尝试更新时,CoreData提取的对象变为零-Swift4

[英]CoreData fetched object becomes nil when tried to update in completion handler - Swift4

        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{

            }


        })

Issue : Hello!I have a use case saying AddReservation where I add a record to CoreData Entity named ReservationsEntity with an attribute isSynced to false initially. 问题 :您好!我有一个用例说AddReservation ,我在其中将记录添加到名为ReservationsEntity CoreData Entity中,该记录最初具有isSyncedfalse的属性。 I also make a server call simultaneously and once the server call returns, I am trying to update the flag isSynced to true . 我也同时进行服务器调用,一旦服务器调用返回,我试图将标志isSynced更新为true But after the server call returns my CoreData object is becoming nil. 但是在服务器调用返回后,我的CoreData对象变为nil。

As per the code posted above, first print(reservationEntity.isSynced!) shows false in the debugger. 按照上面发布的代码,调试器中的第一个print(reservationEntity.isSynced!)显示为false When I try to print/ access reservationEntity after ServerCalls.addReservationToServer returns, app crashes as the reservationEntity object becomes nil . 当我尝试打印/接入reservationEntityServerCalls.addReservationToServer回报,应用程序崩溃的reservationEntity对象变为nil

I have been trying to fix it for the past few days trying different ways but of no use. 在过去的几天里,我一直在尝试通过其他方法来修复它,但是没有用。 What's the mistake I am doing here? 我在这里做什么错?

Can you try this code 你可以试试这个代码

let bgContext = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
bgContext.persistentStoreCoordinator = appDelegate.coreData.persistentContainer.persistentStoreCoordinator

And remove 并删除

let moc = appDelegate.coreData.persistentContainer.viewContext
bgContext.parent = moc

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM