12

NSUserDefaults を使用しているときに、Xcode 5 で osx アプリケーションをプログラミングする際に問題が発生しました。通常、[[NSUserDefaults standardUserDefaults] setObject:@"This is an object" forKey:@"Test"]ユーザーの好みを記憶するために使用します。その後、アプリケーションは ~/Library/Preferences/application.bundle.identifier.plist に plist ファイルを生成します。

問題は、plist ファイルを削除した後でも、保存した設定をアプリケーションが取得できることです。プロジェクトをクリーンアップし、xcode を再起動し、派生フォルダー内のファイルを削除しようとしても、その plist をクリアする方法はありません。この問題を解決する唯一の方法はシステムを再起動することなので、メモリに何かが保存されていると思います。問題は、これらの保存された設定をどのように消去できるかです。(デバッグやテストで手動でコードを追加して設定をクリアするのは不便だと思います。) そして、以前のバージョンの Xcode 4.x を試してみましたが、そのような問題はありません。興味のある方は、新しいココア プロジェクトを作成して、次のようなコードを追加するだけで済みます。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];    
[defaults setObject:@"This is an object." forKey:@"Test"];     
NSLog(@"%@", [defaults objectForKey:@"Test"]); 

「applicationDidFinishLaunching」の下。次に、行って削除し~/Library/Preferences/application.bundle.identifier.plistます。その後、 [defaults setObject:@"This is an object." forKey:@"Test"]; コード内の次の行にコメントを付けて、アプリケーションを再度実行します。コンソールには引き続き"This is an object." My environment is Mavericks GM and Xcode 5.0(5a1413) と表示されます。

これが私だけに起こったことではないことを願っています。

4

1 に答える 1

22

これは、使用している Xcode のバージョンとは直接関係のない OS X の問題です。Apple の公式見解によると、設定を削除するために plist ファイルを削除することは公式にはサポートされていません。最近の OS X リリースでは、設定の保存方法が変更されているため、信頼性が低くなります。

設定を削除するサポートされている方法はdefaults、端末で次のコマンドを使用することです。

defaults delete application.bundle.identifier

このdefaultsコマンドは、環境設定で個々の設定を削除/変更することもできます。詳細については、 を参照してくださいman defaults

于 2013-10-21T01:21:20.983 に答える