Core data CoreData上下文未更新且bool始终为false?

Core data CoreData上下文未更新且bool始终为false?,core-data,swift4,Core Data,Swift4,我正在尝试使用coredata中的布尔值更新用户记录。记录本身正在更新,但我只能看到应用程序会话之间的更改,而不是同一会话 本质上,我是在试图诱捕同意或拒绝应用程序使用条款的用户。登录后在登录屏幕上执行检查,如果条款已获得同意,则继续正常操作。但是,如果条款没有达成一致,那么我需要启动一个popover,允许他们接受条款(每次他们点击登录页时都会发生这种情况,直到他们接受为止) 我正在运行检查,但无论核心数据记录中的值是什么,它的计算结果始终为false: let context = (

我正在尝试使用coredata中的布尔值更新用户记录。记录本身正在更新,但我只能看到应用程序会话之间的更改,而不是同一会话

本质上,我是在试图诱捕同意或拒绝应用程序使用条款的用户。登录后在登录屏幕上执行检查,如果条款已获得同意,则继续正常操作。但是,如果条款没有达成一致,那么我需要启动一个popover,允许他们接受条款(每次他们点击登录页时都会发生这种情况,直到他们接受为止)

  • 我正在运行检查,但无论核心数据记录中的值是什么,它的计算结果始终为false:

        let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
    context.automaticallyMergesChangesFromParent = true
    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "User")
    
    fetchRequest.predicate = NSPredicate(format: "email == %@", userEmail)
    fetchRequest.returnsObjectsAsFaults = false
    
    
    do {
    
        userRecord = try context.fetch(User.fetchRequest())
    
        if userRecord[0].acceptedTerms != nil && userRecord[0].acceptedTerms {
            print("Terms accepted, move along")
        } else {
            print("Terms refused, pop dialog")
        }
    
    } catch {
        print("No user found")
    }  
    

    执行更新后是否在上下文中调用save()?是。我尝试在函数执行后显式调用context.save(),还尝试了一个单独的函数(我有几个不同的更新,在不同的时间运行)-这两个函数在当前应用程序会话中都不起作用。也许你也应该包含更新代码。已更新。由于时间的原因,我们可能会考虑将其转移到云数据库。不过,解决这一问题将是一件好事,既可以为我们提供此应用程序的选项,也可以为其他应用程序提供未来的参考。谢谢
    func updateTermsComplete(userLogin: String, termsPermission: String){
        let context = self.persistentContainer.viewContext
        context.automaticallyMergesChangesFromParent = true
        let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "User")
        fetchRequest.predicate = NSPredicate(format: "email == %@", userLogin)
        fetchRequest.returnsObjectsAsFaults = false
        do {
            userRecord = try context.fetch(fetchRequest) as! [User]
        } catch {
            print("No user found")
        }
        if !userRecord.isEmpty {
            print("User already exists")
            userRecord[0].setValue(termsPermission, forKey: "acceptedTerms")
            do {
                try context.save()
                print("User updated")
            } catch let error as NSError  {
                print("Could not save \(error), \(error.userInfo)")
            } catch {   
            }
            self.saveContext()
        }
        context.refreshAllObjects()
    }
    
    func saveContext () {
        let context = persistentContainer.viewContext
        context.automaticallyMergesChangesFromParent = true
        if context.hasChanges {
            do {
                try context.save()
            } catch {
                let nserror = error as NSError
                fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
            }
        }
    }