在 coredata 中更新加载布尔值

Posted

技术标签:

【中文标题】在 coredata 中更新加载布尔值【英文标题】:Updating a Bool on load in coredata 【发布时间】:2017-02-02 21:16:05 【问题描述】:

我正在尝试检查该应用是否已安装,如果已安装,请删除所有待处理的本地通知。我正在尝试使用此代码,但它似乎没有正确保存到我的核心数据中。

// check to see if the app has already been installed

    let global = Global(context:coreDataStack.managedContext)

    print("Has the app been installed before = \(global.wasLoaded)") // returns false

    if(global.wasLoaded == false)

        print("remove local notifications")
        // remove all notifications
        center.removeAllPendingNotificationRequests()

        global.wasLoaded = true
        coreDataStack.saveContext()
        print("Has the app been installed before = \(global.wasLoaded)") // returns true
    

下次我运行该应用程序时,wasLoad 布尔值仍然返回为 false。 我是否在此处运行了获取请求以使其正常工作?

【问题讨论】:

【参考方案1】:

每次您创建一个新的Global 托管对象时,它始终具有默认值。要实现您想要的,您必须获取已设置的 Global 托管对象并检查它的属性。

Core Data 是解决这个问题的一个非常重要的解决方案,更好的方法是像这样使用UserDefualts

    if UserDefaults.standard.bool(forKey: "isFirstLaunch") == false 
        // Perform first launch actions

        UserDefaults.standard.set(true, forKey: "isFirstLaunch")
    

    // Continue with regular setup

您与false 进行比较是因为如果从未为给定键设置值,bool(forKey:) 将返回false

【讨论】:

谢谢 jjatie,我知道核心数据已经结束了,应用程序的其余部分已经在使用核心数据,所以我想我只是在列表中添加一个实体并跟踪它方式。我以为我错过了请求,但就是不记得详细信息了。 在这种情况下,关于 SO 的许多问题已经与核心数据获取相关。我鼓励你检查一下。尽管如此,这还是比简单地使用UserDefaults 慢得多的解决方案。 对于您的解决方案,我会在执行第一次启动操作后设置 isFirstLaunch = true 吗?

以上是关于在 coredata 中更新加载布尔值的主要内容,如果未能解决你的问题,请参考以下文章

如何选择一个 TableViewCell 并将所有其他单元格设置为 CoreData 中的布尔值 NO?

如何区分 CoreData 中的布尔值和 NSNumber

显示带有来自 Core Data 的布尔值的 .sheet

为啥我存储在 Core Data 中的布尔值没有立即显示?

从Angular 5中的子组件更新父布尔值

更新 plist 字典中的布尔值