【问题标题】:Retreiving data with Core Data使用 Core Data 检索数据
【发布时间】:2020-06-23 13:45:48
【问题描述】:

我正在做一个项目,我应该使用 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. 当用户为第一个填写的表单单击“后退按钮”时,我该如何管理,“历史按钮”可以自行刷新并从禁用按钮变为启用按钮?

非常感谢任何帮助。谢谢

【问题讨论】:

  • Hajar,我不完全理解,但是。对于每个 FORM,添加另一个字段,另一条信息,一个可能名为“PageIndex”的整数。所以你制作的第一个表单,将 PageIndex 设置为 0,下一个是 1,依此类推。也许有帮助?
  • 它们已经在数据库中被自动索引了。
  • 问题是,即使数据库为空,identityArray 也永远不会为空!

标签: ios swift xcode core-data


【解决方案1】:

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

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

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

要么将声明更改为

var userIdentity: UserIDentity?

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

【讨论】:

  • 这很有帮助。谢谢你^^
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多