簡體   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{

            }


        })

問題 :您好!我有一個用例說AddReservation ,我在其中將記錄添加到名為ReservationsEntity CoreData Entity中,該記錄最初具有isSyncedfalse的屬性。 我也同時進行服務器調用,一旦服務器調用返回,我試圖將標志isSynced更新為true 但是在服務器調用返回后,我的CoreData對象變為nil。

按照上面發布的代碼,調試器中的第一個print(reservationEntity.isSynced!)顯示為false 當我嘗試打印/接入reservationEntityServerCalls.addReservationToServer回報,應用程序崩潰的reservationEntity對象變為nil

在過去的幾天里,我一直在嘗試通過其他方法來修復它,但是沒有用。 我在這里做什么錯?

你可以試試這個代碼

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

並刪除

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM