在coredata

时间:2017-02-02 21:16:05

标签: ios xcode core-data swift3

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

// 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 bool仍然会返回false。 我是否在此处运行了获取请求以使其正常工作?

1 个答案:

答案 0 :(得分:3)

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

核心数据是解决此问题的一个非常重要的解决方案,更好的方法是使用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