12

ユーザーがiPhoneの設定領域で設定を変更できるようにします。次のネットワーク同期中に、ユーザーの変更をサーバーに送信したいと思います。ただし、変更が加えられた場合に限ります。

しかし、ユーザーが設定領域内で変更を行ったことをどのように知ることができますか?

可能であれば、変更されているかどうかに関係なく常に情報を送信したり、最初にサーバーから情報を取得してユーザーのデフォルトと異なる場合は更新したりするオプションは避けたいと思います。

この問題を解決する素敵でエレガントな方法はありますか? ご協力ありがとうございました!

1週間経っても答えがない... この質問は難しすぎるのでしょうか、それともまったく意味がありませんか?

4

3 に答える 3

18

ああ、私は愚かです!ここではエレガントな方法で行きます。XCode 内の Apple ドキュメントで AppPrefs を検索すると、やりたいことを正確に実行するサンプル アプリが表示されます。コンパイルして実行するだけ!NSUserDefaultsDidChangeNotificationを利用します。

これは、オブザーバーを登録するために使用されているコードです。

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(defaultsChanged:)
                                             name:NSUserDefaultsDidChangeNotification
                                           object:nil];

古い答え:

NSUserDefaults から変更日を取得できるようには見えません。これまでのところ、次の方法しか考えられません。

NSUserDefaults *previousDefaults = [someInstance previousUserDefaults];
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];

if([previousDefaults isEqualToDictionary:currentDefaults]) 
{
    [someOtherInstance sendModifiedUserDefaultsToServerWithDefaults:currentDefaults];
    [yetAnotherInstance saveModified]
}

アプリを初めて起動するときに、ユーザーの既定値をディクショナリとしてディスクに保存する必要があります。つまり、既定値です。次に、アプリを開くたびに、これら 2 つの辞書を比較します。もし彼らが

于 2011-04-02T21:08:32.770 に答える
2

質問が難しすぎるということではなく、あなたが求めていることを行うための簡単な方法がないというだけです。NSUserDefaults は、少なくとも私が知る限り、各アプリの設定の「最終更新日」を記録していないため、ユーザーが設定アプリを使用していくつかの設定を変更した場合、それを確認する以外にそれを検出する良い方法はありませんすべての設定。

本当にこれを行う必要がある場合は、データ構造に同期することに関心のある設定を読み取り、その構造に基づいてある種のハッシュまたはチェックサムを計算するのが最善の策だと思います。その値を、アプリを最後に実行したときに計算した値と比較し、異なる場合はサーバーと同期します。必要に応じてその値を NSUserDefaults に保存できますが、計算に含めないようにしてください。

于 2011-04-02T21:02:35.223 に答える