首页 > 解决方案 > 使用 Core Data 检索数据

问题描述

我正在做一个项目,我应该使用 Core Data 在本地保存数据。

这是我的工作流程:

我有一个bar button item点击后可以显示最新填写的表格。

我尝试了这段代码,我从数据库中获取数据并影响到一个数组,但按钮接缝根本不起作用,它永远不会被禁用......

class ViewController: UIViewController {

    var userIdentity: UserIDentity = UserIDentity(context: PersistanceService.context)
    var identityArray = [UserIDentity]()


override func viewDidLoad() {
    super.viewDidLoad()
    self.fetchIdentityHistoryArray()
}


func fetchIdentityHistoryArray(){
    let fetchRequest: NSFetchRequest<UserIDentity> = UserIDentity.fetchRequest()
    
    do {
        let identityArray = try PersistanceService.context.fetch(fetchRequest)
        
        if identityArray.isEmpty {
                self.identityHistoryButton.isEnabled = false
            
        }
        else {
            self.identityHistoryButton.isEnabled = true
        }
    }
        catch {
            print("Error fetching sworn statement history !")
        }
    }


}

所以我有两个问题:

  1. 我的代码有什么问题?
  2. 当用户为第一个填写的表单单击“后退按钮”时,我该如何管理,“历史按钮”可以自行刷新并从禁用按钮变为启用按钮?

任何帮助深表感谢。谢谢

标签: iosswiftxcodecore-data

解决方案


您正在代码中直接初始化核心数据对象

var userIdentity: UserIDentity = UserIDentity(context: PersistanceService.context)

这个新对象将存在于 Core Data 中,并且每次执行 fetch 请求时都会包含在内。您必须了解 Core Data 不是数据库层,它是对象映射层,因此即使您尚未调用save()该对象,该对象仍存在于 Core Data 上下文中。

要么将声明更改为

var userIdentity: UserIDentity?

如果不使用,则将其完全删除。


推荐阅读