2

我正在尝试使用通知系统,以便在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用于推入。

回答

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]; 
+0

感谢西蒙。但是,在这种情况下,我将如何实现这一点,即,我可以使用通知将视图控制器传递给splitviewcontroller吗? – 2011-05-03 11:20:04

+0

太好了,它只是通知中的对象,很好用! – 2011-05-03 11:23:31

+0

@Luuk D. Jansen:太好了。 – EmptyStack 2011-05-03 11:35:13