2012-02-13 5 views
3

アップルの要件に従ってサンドボックスをサポートするために私のプロジェクトを移動しています。私はUserDefaultsを以下のように使用しています。NSUserDefaultsとLambの下のサンドボックス

[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:myNumber] forKey:myNumberKey]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

サンドボックスを有効にするまでは、すべてが正常に機能します。サンドボックスが有効になっている場合、アプリケーションはサンドボックスディレクトリ(.plist.lockfile)にロックファイルを作成し、実際の.plistファイルは作成しません。

私は間違っていますが、どのように私の設定をサンドボックス環境下のUserDefaultsに保存しますか?

アップデート:別のMacに最新のxcodeを10.7.3で新しくインストール - 同じプロジェクトがコンパイルされ、サンドボックス機能が有効になっていれば正常に動作します。

また、このプロジェクトを私のmacで実行しようとしましたが、サンドボックスは別のユーザーアカウント(新しく作成されたもの)で全く同じ結果で動作しません。この時点で私は問題がこの特定のMacのシステム構成にあると思う。質問はありますが - 私がこの奇妙な問題を持つ唯一の人だと仮定するのは安全ですか?おそらく...

ありがとうございます。

+0

私もサンドボックスが有効になっているが、ユーザーのデフォルトは素晴らしい仕事。私は同期メソッドが何のために良いのか分かりませんが、ユーザーデフォルトを初期化するときにも\t '[[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues];'を使用しています。 – Daniel

答えて

2

正常に動作するはずです。環境設定システムがロックファイルを作成できる場合は、そのディレクトリにファイルを作成するための適切な権限がアプリケーションにあり、配置する場所を正しく検索したことを意味します。したがって、何かが間違っていなければなりません。

これが発生した場合、コンソールログはありますか? -synchronizeの戻り値は何ですか?

(余談:一般-synchronizeには必要ではなく、ちょうどあなたのアプリが遅く、NSUserDefaults自体ことを処理するようになります)

+0

-synchronizeは、システムが値を完全に格納する前にデータを使用する予定がある場合にのみ必要です。基本的にはデフォルト値の強制保存イベントです。さもなければ、OSはそれに回り込むときに物事を保存します。 –

+2

本当にそうではありません。その期間に*別のプロセス*がデータを使用することが期待される場合は必要です。 1つのプロセス(アプリケーションの99%)でアクセスする場合は、すぐに利用できます。 –

+0

よろしくお願いいたします。ありがとう! –