发布通知时发生NSInvalidArgumentException
问题描述:
我正在尝试使用通知系统,以便在Splitviewcontroller中具有更新TableView的详细视图。我宣布通知如下:发布通知时发生NSInvalidArgumentException
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pushView:) name:@"pushView" object:nil];
,并选择自己:现在
- (void) pushView:(UIViewController *) viewController {
[self.navigationController pushViewController:viewController animated:YES];
}
,在的DetailView我创建视图控制器,并调用创建通知:
ArticleTableViewController *articleTableView = [[ArticleTableViewController alloc] initWithCategory:catInt];
[[NSNotificationCenter defaultCenter] postNotificationName:@"pushView" object:articleTableView];
我认为这将工作,但我得到的错误:
* Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSConcreteNotification setParentViewController:]: unrecognized selector sent to instance 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];
感谢西蒙。但是,在这种情况下,我将如何实现这一点,即,我可以使用通知将视图控制器传递给splitviewcontroller吗? – 2011-05-03 11:20:04
太好了,它只是通知中的对象,很好用! – 2011-05-03 11:23:31
@Luuk D. Jansen:太好了。 – EmptyStack 2011-05-03 11:35:13