2017-02-02 6 views
0

私はアプリがすでにインストールされているかどうかを確認しようとしています。もしそうなら、すべての保留中のローカル通知を削除します。このコードを使用しようとしていますが、Core Dataに正しく保存されていないようです。コアデータの読み込み時に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 boolがfalseに戻ってきます。 この作業を正しく行うためにここでフェッチ要求を実行しましたか?

答えて

3

新しいGlobal管理オブジェクトを作成するたびに、常にデフォルト値が設定されます。必要なものを実現するには、既に設定されているGlobal管理対象オブジェクトを取得し、そのプロパティをチェックする必要があります。

コアデータは、より良い1は、このようなUserDefualtsを使用することです、この問題に非常に重いソリューションです:

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

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

    // Continue with regular setup 

値を指定するために設定されていなかった場合は、falsebool(forKey:)ために戻っfalseと比較しますキー。

+0

ありがとうございましたjjatie、私はコアデータがこれを殺すのを知っていますが、アプリケーションの残りの部分は既にコアデータを使用していますので、リストにエンティティを追加してそのように追跡していると思っていました。私は要求を逃していると仮定しましたが、そのことについての詳細は覚えていませんでした。 – icekomo

+0

この場合、コアデータフェッチにはすでに関連しているので、多くの質問があります。私はそれらをチェックすることをお勧めします。それでも、これは単純に 'UserDefaults'を使うよりもはるかに遅い解決策です。あなたのソリューションの – jjatie

+0

は、最初の起動アクションが実行された後にisFirstLaunch = trueを設定しますか? – icekomo

関連する問題