Вопрос

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

Это было полезно?

Решение

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

[[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];
}

Другие советы

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

В классе 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];
 }

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top