Отправьте NSNotification от класса A до класса B - PullRequest
4 голосов
/ 25 июля 2011

Итак, у меня есть приложение с покупкой в ​​приложении.Покупка в приложении управляется в FirstViewController.Когда пользователь приобрел продукт, я хочу отправить уведомление на мой MainTableViewController, чтобы перезагрузить данные таблиц и показать новые объекты, которые были приобретены при покупке в приложении.Поэтому в основном я хочу отправить уведомление из класса A в класс B, а затем класс B перезагружает данные таблицы.Я пытался использовать NSNotificationCenter, но безуспешно, но я знаю, что это возможно с NSNotificationCenter, я просто не знаю, как.

Ответы [ 3 ]

25 голосов
/ 25 июля 2011

В классе А: опубликовать уведомление

[[NSNotificationCenter defaultCenter] postNotificationName:@"DataUpdated"
                                                        object:self];

В классе B: сначала зарегистрируйтесь для уведомления, и напишите метод для его обработки.
Вы передаете соответствующий селектор методу.

// view did load
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(handleUpdatedData:)
                                             name:@"DataUpdated"
                                           object:nil];

-(void)handleUpdatedData:(NSNotification *)notification {
    NSLog(@"recieved");
    [self.tableView reloadData];
}
8 голосов
/ 25 июля 2011

Хорошо, я добавляю немного больше информации к ответу Винса

В классе A: отправьте уведомление

[[NSNotificationCenter defaultCenter] postNotificationName:@"DataUpdated"
                                                   object:arrayOfPurchasedObjects];

В классе B: сначала зарегистрируйтесь для уведомления, и напишитеметод для его обработки.
Вы передаете соответствующий селектор методу.Прежде чем публиковать уведомление, убедитесь, что ваш класс B выделен, иначе уведомление не будет работать.

- (void) viewDidLoad {
// view did load
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(handleUpdatedData:)
                                             name:@"DataUpdated"
                                           object:nil];
}

-(void)handleUpdatedData:(NSNotification *)notification {
    NSLog(@"recieved");
    NSArray *purchased = [notification object];
    [classBTableDataSourceArray addObjectsFromArray:purchased];
    [self.tableView reloadData];
}

- (void) dealloc {
    // view did load
    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                 name:@"DataUpdated"
                                               object:nil];
    [super dealloc];
 }
0 голосов
/ 25 июля 2011

Может быть, вы пытаетесь отправить уведомление из другой темы?NSNotification не будет доставлен наблюдателю из другого потока.

...