2011-09-13 6 views
0

私のアプリケーションには、一連のテキストフィールド、チェックボックス、およびその他のコントロールがあります。理想的には、コントロールのいずれか(またはすべて)で何かが変更されたときに情報を保存するようにユーザーに依頼します。アプリケーション全体のデータの変更を確認する

これを取得する方法はありますか?が変更されましたビヘイビアアプリケーションが広いですか?または私はコントロールごとにアクションを作成し、そこにコードを設定する必要がありますか?

これが何か違いがあれば、私はXcode 4を使用しています。

ありがとうございました。

+0

複数のコントロールが1つのアクションをポイントできる場合、送信者のタグまたはインデックスに基づいて区別できます。 –

答えて

2

とにかく(ユーザーの変更を処理するために)コントロールごとにコードを記述する必要があります。

アプリの設定方法に応じて、変更可能なプロパティごとにコードを追加する必要があります。

NSNotificationCenterを使用し、データプロパティの1つが変更されたときに「何か変わった」通知を送信することをお勧めします。あなたのコントロールはあなたには、いくつかのデータ・ストレージ・オブジェクトのプロパティを設定するタッチする

-(IBAction)grommetSwitchPress:(UISwitch*)sender 
{ 
    self.userData.wantsGrommets = sender.on; 
} 

データ・ストレージ・クラスは、プロパティを定義すること:

@interface UserData : NSObject 
{ 
} 
@property (nonatomic, assign) BOOL wantsGrommets; 

そのカスタムプロパティのセッターと値が変更されたかどうかをテストします:

-(void)setWantsGrommets:(BOOL)wantsThem 
{ 
    if (wantsGrommets != wantsThem) // compares current property value with incoming 
    { 
     wantsGrommets = wantsThem; 
     [[NSNotificationCenter defaultCenter] 
        postNotificationName:NOTIFY_SOMETHING_CHANGED 
        object:self]; 
    } 
} 

一部のヘッダーでは、カチオンメッセージ:

#define NOTIFY_SOMETHING_CHANGED  @"somethingChanged" 

、それはどこNOTIFY_SOMETHING_CHANGEDを​​リッスンあなたのアプリ、例えばにコードを配置するかを決定するのはあなた次第です:

- (void)viewDidLoad:(BOOL)animated 
{ 
    [[NSNotificationCenter defaultCenter] addObserver:self 
       selector:@selector(somethingChanged:) 
      name:NOTIFY_SOMETHING_CHANGED 
      object:nil]; 
} 

somethingChangedで:方法、あなたはにデータを保存することができNSUserDefaultsなどです。

「コントロールのいずれか(またはすべて)で何かが変更されたときに情報を保存するようにユーザーに依頼する」ことをお勧めします。ユーザーに自分の変更を保存してもらいたいかどうかを尋ねるのは面倒です...もちろんそうです。それらに戻す機会を与えたい場合は、代わりに「元に戻す」または「リセット」ボタンを用意してください。

+0

素晴らしいです。私はそれを試してみようと私はあなたにリジッドを得るでしょう。 –

+0

素晴らしい答え。非常に詳細。 –

+0

それは必要です。ありがとうございます@ ZeroDiv –

関連する問題