Cocoa touch NSInvalidArgumentException发布通知时

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 { [

我正在尝试使用通知系统,以便在Splitviewcontroller中有一个详细视图来更新tableview。我宣布通知如下:

[[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吗?太好了,它只是通知中的对象,非常好!