繁体   English   中英

发布通知时出现 NSInvalidArgumentException

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM