1

ここでは、ObjectiveC と Cocoa はまだかなり新しいものです。うまくいけば、この質問に対する答えは簡単ですが、痛々しいほど明白ではありません.

いくつかのテキスト フィールドを使用して、3 番目のテキスト フィールドで文字列を検索するいくつかの文字列を設定し、結果をラベルに表示する単純なアプリケーションを作成しました。この演習では、 の-rangeOfString方法を使用していNSStringます。もっと楽しくするために、大文字と小文字を区別して検索するためのチェックボックスを追加することにしました。

アプリケーションの起動時に、チェックボックスの状態とそれが「制御」する BOOL が同期していないことを除いて、すべてうまく機能します。IB では、チェックボックスの状態がオンに設定されています。チェックボックスのアクションのターゲットは、チェックボックスの-(IBAction)checkboxChange状態を評価し、それに応じて BOOL を設定するメソッドです。BOOL は値 NO で作成されます。

-awakeFromNib現在、BOOL を YES に設定するコード行があります。私が求めているのは、アプリケーションがロードされたときにチェックボックスにアクションを送信させて、チェックボックスの状態と一致するように BOOL を設定する方法です。AppDelegate で使用できると思っ-applicationDidFinishLoadingたのですが、チェックボックスを参照する方法がわかりません。また、そのメソッドで BOOL の値を設定できると思いましたが、BOOL が定義されている .h ファイルをインポートしたにもかかわらず、XCode は識別子が未定義であると不平を言います。

関連する必要がありますが、すべてのコードは AppController という名前のクラスにあり、デフォルトの AppDelegate はまったく使用していません。

読んでくれて、そしてあなたの提案/答えをありがとう!

4

1 に答える 1

1

NSUserDefaultsアプリケーションの起動後も設定状態を維持するための最良の友です。変更を行った後は、必ずメソッドを呼び出しsynchronizeてディスクに永続化してください。場合によっては、アプリがバックグラウンド状態になるまで同期を遅らせたいことがあります。

NSUserDefaults クラス リファレンス

サンプルコード:

#define USER_DEFAULT_CASE_SENSITIVE @"USER_DEFAULT_CASE_SENSITIVE"

-(IBAction)checkboxChange {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setBool:self.caseSensitive.on forKey:USER_DEFAULT_CASE_SENSITIVE];
    [defaults synchronize];
}

アプリの再起動時に復元するには:

- (void)viewDidLoad {
    [super viewDidLoad];
    // other code

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    self.caseSensitive.on = [defaults boolForKey:USER_DEFAULT_CASE_SENSITIVE]
}
于 2012-10-18T03:42:56.623 に答える