2017-10-02 10 views
0

thisと同じ問題かもしれません。しかし、私が試したソリューションのいくつかはうまくいきません。Xcode 9シミュレータでユーザーのデフォルト値が保存されない

シミュレータは、Xcode Version 9.0 beta 6(9M214v)でuserdefaultsを保存しません。 私はXcode 8も(9と一緒に)持っていましたが、それを削除しました。私が使用している

コード:

UserDefaults.standard.setValue("1234567", forKey: "phone") 
if let phone = UserDefaults.standard.value(forKey: "phone") as? String{ 
    //some code here 
} 

また、私が試してみました:synchronizeを行い、ユーザーのデフォルト値がどのように書かれているかについての誤解がたくさんあります

UserDefaults.standard.set("1234567", forKey: "phone") 
if let phone = UserDefaults.standard.object(forKey: "phone") as? String{ 
    //some code here 
} 
+3

'UserDefaults.standard.synchronize()'?デフォルトは、明示的に行うまでディスクに書き込まれません。 –

+0

@AlejandroIván[必ずしも。](https:// stackoverflow。com/questions/37485109/is-it-mandatory-to-call-nsuserdefaults-synchronize-method) – the4kman

+0

@ the4kmanよく...はい、そうです。私はすべての書き込み(通常セッションクッキー、ユーザーデータ、それにかなりのもの)で同期するために使用されます。 OPの特別なケース(執筆後の読書)では、これはデータが既に保存されていることを確認するために必要であると私は信じています。または私は何かを逃していますか? –

答えて

2

。どのように動作するかを推測する前に、常にcurrent maintainer's commentaryを確認してください。彼は事についてかなり明確です。彼のanalogy to gitもやや役に立ち、iOS 8についての彼のメモを参照してください。 NSUserDefaultsは、そのような古い技術の場合とは違う方法で変化します。

プロダクションアプリでは、synchronizeを呼び出す必要はほとんどありません。 (実際には、それを卑下し、削除についての議論が繰り返しています。)ドキュメント注意点としては:

この方法は、一定の間隔で自動的に呼び出されるので、あなたが自動同期を待つことができない場合にのみ、このメソッドを使用します(たとえばアプリケーションが終了しようとしている場合)、または変更を加えていないにもかかわらず、ユーザーのデフォルトをディスク上のものに更新したい場合に使用します。

さらに、これらのケースでも主にmacOSに関するものです。 [プロセス間の同期]も、このような状況で

のiOS 9.3以降/ MacOSのシエラ上で実行中のアプリケーションの場合

以降、-synchronizeが必要(または推奨)されていない、デフォルトのキー値の観測は現在、プロセス間で動作しますので、読み取りプロセスは値を変更するために直接監視することができます。その結果、これらのオペレーティングシステム上で動作するアプリケーションは、通常、決して同期を呼び出すべきではありません。

しかし.....

人々は、シミュレータでユーザデフォルトで持っている通常の問題は、彼らが、書き込みが行われる前に(クラッシュ、アプリを再起動し、打つ停止)アプリを殺すことです。生産上、これは一般的に問題ではありません。とにかくあなたが不十分な状態になっている可能性が非常に高いので、あなたがゴミを書いたり、何か良いものを書いたり、何かを書かなかったりしても、それはすべての種類のトスですあなたが好きなものの - アップ。しかし、開発時には、プログラムの終了が常に発生し、多くの場合、これはユーザーのデフォルトを書き留めないことにつながります。

ここでよく考えられる解決策は、synchronizeをあちこちに振りかけることです。しかし、ほとんどの場合、コードが遅くなるだけです。それがうまくいくならば、大丈夫です。しかし、私が取り組んだプロジェクトの大半で、本当の解決策は、アプリを殺す前に息をすることでした。それは多くの時間を必要としません。それが保存されているかどうかを確認するために再起動する前に、保存していたものを書き込む機会がある前に、アプリを終了させないでください。

+0

ありがとう、私はここ(iOS)少し新しいです、あなたはローカルストレージで動作する正しい方法を学ぶための良い情報源を知っていますか? – ChaosPredictor

+0

「ローカルストレージ」とはどういう意味ですか?iOSにはローカルに物を保存するいくつかの方法があり、実際に保存しているものによって異なります。あなたはベータテストを行っているので、特定のベータにはバグがある可能性は常にありますが、これについては何も聞いていません。私は間違いなく、現在のリリースとベータ版を取得したいと思います。 –

+1

一般的なルールとして、最終的なドキュメントはアップルのサイトにあり、「ファイルシステムプログラミングガイド」などのタイトルに「プログラミングガイド」という言葉が含まれています。それらはいつもあなたが始めたい場所です。 –

関連する問題