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