提问者:小点点

利用核心数据检索数据


我正在做一个项目,在这个项目中,我应该将数据与核心数据一起保存在本地。

以下是我的工作流程:

  • 首先,我要求用户填写一个表单,让我们说出他的名字和姓氏。
  • 他单击submit按钮,然后使用核心数据将数据保存在设备上
  • 用户被重定向到“最后填写的表单”视图控制器。

我有一个条形按钮项目,单击它可以显示最新填写的表单。

  • 我应该测试填充表单的数组是否为空,则应该禁用该按钮。
  • 否则,应启用该按钮...

我尝试了这段代码,在这里我从数据库中获取数据,并影响到一个数组,但按钮接缝根本不工作,它从来没有被禁用。。。

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. 当用户单击首次填写的表单的“后退按钮”时,如何管理“历史记录按钮”可以自我刷新并从禁用按钮变为启用按钮?

如有任何帮助,我们将不胜感激。 谢谢


共1个答案

匿名用户

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

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

这个新对象将存在于核心数据中,并且将在每次执行fetch请求时被包括在内。 您必须理解,核心数据不是数据库层,而是对象映射层,因此,即使您没有调用save(),对象仍然存在于核心数据上下文中。

将声明更改为

var userIdentity: UserIDentity?

或者在不使用时将其完全删除。