2017-02-02 66 views
0

我想檢查應用程序是否已經安裝,如果是,刪除所有未決的本地通知。我試圖使用這個代碼,但它似乎並沒有正確保存到我的核心數據。更新在Coredata加載Bool

// 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布爾恢復爲假。 我是否在此處運行提取請求以使其正常工作?

回答

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如果從來沒有設置一個給定的值鍵。

+0

感謝jjatie,我知道核心數據已經過了殺死這個,應用程序的其餘部分已經在使用核心數據,所以我想我只是添加一個實體到列表中,並跟蹤它的方式。我以爲我錯過了這個請求,但只記得那些細節。 – icekomo

+0

在這種情況下,關於SO的許多問題已經與核心數據獲取有關。我鼓勵你檢查一下。不過,這是一個比簡單使用UserDefaults慢得多的解決方案。 – jjatie

+0

爲您的解決方案,然後我會設置isFirstLaunch = true後執行第一次啓動操作? – icekomo