[英]NSInvalidArgumentException when loading a TableViewController
[英]NSInvalidArgumentException when posting notification
我正在尝试使用通知系统,以便在 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 包含在用于推送的通知中做错了。
处理通知的方法定义似乎是错误的。
- (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];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.