Есть (по крайней мере) два способа сделать это:
- Вы используете уведомление, которое прослушивает один контроллер, а другой отправляет в нужное время.
- Вы создаете протокол делегата, который реализует первый контроллер, а второй — при вызовах.
Делегат немного сложнее, но обычно считается хорошим стилем. Уведомление тоже неплохое, но чуть менее «элегантное». Я опишу уведомление на основе здесь, потому что это кажется подходящим для вашего случая, а также позволит реагировать на покупку в нескольких местах, просто зарегистрировавшись для получения уведомления там.
В контроллере, который имеет образ для обновления, зарегистрируйте уведомление в 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», связанный с новым именем изображения.
person
Daniel Schneller
schedule
25.03.2013