我正在尝试使用通知系统,以便在Splitviewcontroller中获得详细信息视图以更新tableview。我宣布通知如下:
[[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时做错了。
答案 0 :(得分:5)
处理通知的方法定义似乎是错误的。
- (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];