【问题标题】:Updating a Bool on load in coredata在 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。 我是否在此处运行了获取请求以使其正常工作?

【问题讨论】:

    标签: ios xcode core-data swift3


    【解决方案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 吗?
    猜你喜欢
    • 2021-10-17
    • 2021-03-15
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    相关资源
    最近更新 更多