Cocoa touch NSInvalidArgumentException发布通知时
我正在尝试使用通知系统,以便在Splitviewcontroller中有一个详细视图来更新tableview。我宣布通知如下:Cocoa touch NSInvalidArgumentException发布通知时,cocoa-touch,uiviewcontroller,notifications,uisplitviewcontroller,ipad,Cocoa Touch,Uiviewcontroller,Notifications,Uisplitviewcontroller,Ipad,我正在尝试使用通知系统,以便在Splitviewcontroller中有一个详细视图来更新tableview。我宣布通知如下: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pushView:) name:@"pushView" object:nil]; 以及选择器本身: - (void) pushView:(UIViewController *) viewController { [
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pushView:) name:@"pushView" object:nil];
以及选择器本身:
- (void) pushView:(UIViewController *) viewController {
[self.navigationController pushViewController:viewController animated:YES];
}
现在,在detailview中,我创建视图控制器并调用create the notification:
ArticleTableViewController *articleTableView = [[ArticleTableViewController alloc] initWithCategory:catInt];
[[NSNotificationCenter defaultCenter] postNotificationName:@"pushView" object:articleTableView];
我认为这会起作用,但我得到了一个错误:
*由于未捕获而终止应用程序
例外
“NSInvalidArgumentException”,原因:
'-[N混凝土化
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];
谢谢你,西蒙。但是在这种情况下,我该如何实现它,即我可以使用通知将视图控制器传递给splitviewcontroller吗?太好了,它只是通知中的对象,非常好!