NSInvalidArgumentException при публикации уведомления - PullRequest
2 голосов
/ 03 мая 2011

Я пытаюсь использовать систему уведомлений, чтобы иметь подробное представление в Splitviewcontroller для обновления табличного представления.Я объявил уведомление следующим образом:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pushView:) name:@"pushView" object:nil];

и сам селектор:

- (void) pushView:(UIViewController *) viewController {
    [self.navigationController pushViewController:viewController animated:YES];
}

Теперь в подробном представлении я создаю контроллер представления и вызываю создание уведомления:

   ArticleTableViewController *articleTableView  = [[ArticleTableViewController alloc] initWithCategory:catInt];

   [[NSNotificationCenter defaultCenter] postNotificationName:@"pushView" object:articleTableView];

Я предполагал, что это сработает, но я получаю ошибку:

* Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: '- [NSConcreteNotification setParentViewController:]: нераспознанный селектор отправлен в экземпляр 0x5a3a290 '

Так что я думаю, что я делаю что-то не так в том, как включение detailViewController в уведомление, которое будет использоваться для отправки.

1 Ответ

5 голосов
/ 03 мая 2011

Кажется, что определение метода для обработки уведомления неверно.

- (void) pushView:(UIViewController *) viewController

должно быть,

- (void) pushView:(NSNotification *) notification

Фактическое уведомление передается в качестве аргумента, а не любые контроллеры представления. Чтобы достичь желаемого, попробуйте следующее.

- (void) pushView:(NSNotification *) notification

    NSDictionary *userInfo = [notification userInfo];
    UIViewController *viewController = (UIViewController *)[userInfo objectForKey:@"ViewController"];
    [self.navigationController pushViewController:viewController animated:YES];
}

А при публикации уведомления

    ArticleTableViewController *articleTableView  = [[ArticleTableViewController alloc] initWithCategory:catInt];
    NSDictionary *userInfo = [NSDictionary dictionaryWithObject:articleTableView forKey:@"ViewController"];
    [[NSNotificationCenter defaultCenter] postNotificationName:@"pushView" object:nil userInfo:userInfo];
...