これを行うには(少なくとも)2つの方法があります。
- 1つのコントローラーがリッスンし、もう1つのコントローラーが適切なタイミングで送信する通知を使用します。
- 最初のコントローラが実装し、2番目のコントローラが呼び出し時に実装するデリゲートプロトコルを作成します。
デリゲートはもう少し複雑ですが、一般的には良いスタイルと考えられています。通知も悪くはありませんが、少し「エレガント」ではありません。ここでは、通知ベースの通知について説明します。これは、あなたのケースでは問題ないようであり、通知を登録するだけで複数の場所での購入に対応できるためです。
更新するイメージがあるコントローラーで、次のアドレスに通知を登録しviewDidAppear:
ます。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateImage:) name:@"UpdateImageNotification" object:nil];
updateImage:
メソッドを実装します。
-(void)updateImage:(NSNotification*)note
{
NSString* newImageName = note.userInfo[@"imageFileKey"];
// ... update UI with the new image
}
また、ビューが消えたときにその通知の登録を解除してください。
-(void)viewWillDisappear:(BOOL)animated
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
[super viewWillDisappear:animated];
}
更新をトリガーする他のコントローラーで、適切な場所で通知を発行します。
-(IBAction)purchase:(id)sender
{
// ...
NSDictionary* userInfo = @{@"imageFileKey" : newImageName};
[[NSNotificationCenter defaultCenter]
postNotificationName:@"UpdateImageNotification"
object:self userInfo:userInfo];
// ...
}
object
通知コンテキストのパラメーターは、任意のオブジェクトによる通知をリッスンするか、非常に特定のインスタンスのみによる通知をリッスンするかを指定するために使用されます。多くの場合、実際のインスタンスは関係ありませんが、通知を名前で識別します(この場合は「UpdateImageNotification」のように)。
辞書は、userInfo
通知とともに提供する必要のある情報を運ぶことを目的としています。そのため、新しい画像名に関連付けられたキー「imageFileKey」を導入しました。