2

userdefaultsキー「isWalkthroughPresented」がある場合に、いくつかの単純なシステムを作成しました。キーがfalse表示されている場合walkthourghViewController。キーがない場合は、データベースから確認してください。

ただし、初回以降はキーが設定されません。しかし、いくつかの起動後に保存されます。問題は何ですか?

これは、ユーザーがサインインして 2 番目の ViewController が表示された後に、viewDidAppear 内で使用するコードです。

let userDefaults = UserDefaults.standard

        if !userDefaults.bool(forKey: "isWalkthroughPresented") {

            presentWalkthrough()

            userDefaults.set(true, forKey: "isWalkthroughPresented")

        }else{
            checkIfCurrentUserHasOpenedTheAppBefore()//this just checks if user in db has the value
        }
4

1 に答える 1

3

ユーザーのデフォルト値を設定した後、これを呼び出して、データベースへの変更を強制的に保存します。

//...
userDefaults.set(true, forKey: "isWalkthroughPresented")
userDefaults.synchronize()

通常、synchronize()メソッドは定期的に呼び出され、キャッシュされたユーザー設定をデータベースに保存します。を設定してから再度読み取るまでの間隔は、自動的に呼び出される"isWalkthroughPresented"には十分ではありません。synchronize()

メソッドのドキュメントから次の詳細も参照してください。

このメソッド [synchronize()] は定期的に自動的に呼び出されるため、このメソッドは、自動同期を待てない場合 (たとえば、アプリケーションが終了しようとしている場合)、またはユーザーの既定値を更新する場合にのみ使用してください。何も変更していなくても、ディスク上にあります。

于 2016-10-27T10:29:54.587 に答える