10

Mac OSX Mavericks (10.9) のプレリリース バージョンをインストールしました。私のアプリケーションには

  NSUserDefaults *preferences = [[NSUserDefaults standardUserDefaults] retain];
    [preferences setInteger:[_lblSetValue integerValue] forKey:@"execute"];
[defaults synchronize];

NSUserDefauls として、Library -> Preferences -> appbundlename.plist の Plist ファイルに値を保存します。Plist ファイルの値を変更した場合、アプリケーションを再度起動し、次の方法で値にアクセスします。

id abc = [preferences valueForKey:@"execute"];

次に、最終的に変更された値ではなく、以前の値を提供します。Plist ファイルでもう一度確認すると、変更値が保存されます。

例:

最初のように、キー実行の値を 1234 に設定してからアプリケーションを停止し、Plist ファイルのパス ライブラリ -> 設定 -> appbundlename.plist の値を 1000 に変更し、アプリケーションを再度起動してその値にアクセスします。

 id abc = [preferences valueForKey:@"execute"];

それは私に 1000 ではなく 1234 を与えます。

Plist の変更された値を取得する必要があります。ロイン/マウンテンロインでは適切な価値が得られますが、マーベリックスではそうではありません.

助けてください。

4

5 に答える 5

12

この問題に対する私の回避策は、.plist ファイルに変更を加えた後に「cfprefsd」デーモン プロセスを強制終了することです。

ps auwx | grep cfprefsd | grep -v グレップ | awk '{print $2}' | xargs sudo kill -9

デーモンは .plist ファイルへの次のアクセス後に再起動され、変更されたキーの新しい値が設定されます。

この回避策が必要なのは残念ですが、少なくとも確実に機能します。

于 2013-11-07T18:16:34.850 に答える
5

これにより、まったく別の OS (つまり、Apple ではない) を使用しているように感じました。

Mavericks がユーザーのデフォルトの保存方法を変更した可能性があります。そのため、plist ファイルを削除すると、そのアプリのユーザーの既定値が台無しになります。

コンテナー (plist ファイルを含む) を削除する適切な方法は、ターミナルから「デフォルト」を使用することです。「デフォルト」を使用した単純な削除が適切に機能するかどうかは確認していません。

私の問題を「修正」するには、Mavericks を (一気飲み) 再起動する必要がありました。これにより、NSUserDefaults キャッシュがクリアされ、NSUserDefaults が正しく機能するようになります。注:ログアウト/ログインも機能する可能性があることを読みました。

それが役立つことを願っています。ケビン

于 2013-12-10T21:32:24.910 に答える
0

[defaults synchronize];キーを設定してから呼び出していますか

一般に、環境設定は適切なタイミングで保存されますが、設定してからすぐにアクセスする場合は、保存を強制するためにこれを行う必要がある場合があります。

しかし、あなたがそれをそんなに速くやっているなら、私はあなたがそれを使って設定を保存しているのではないかと疑い始めています. プログラムに状態を​​渡すためにこれを行っている場合は、NSUserDefaults を使用するより良い方法があります。

于 2013-09-10T14:27:56.933 に答える