MainViewController pushViewController:animated:]:无法识别的选择器发送到实例0x1459e980

时间:2015-07-16 07:29:03

标签: ios objective-c nsstring apple-push-notifications

我尝试在我的iOS应用上打开通知时尝试添加打开特定视图控制器的功能。由于我是iOS新手,我有一些疑问。

我写了后端,它将promo id作为自定义参数发送。我能够在XCode上接收JSON对象,将ID作为NSString读取。

现在,我想以促销ID作为参数打开PromotionDetailViewController。

我到目前为止所做的是,

    PromotionDetailViewController *pVC = [[PromotionDetailViewController alloc] initWithPromotionID:promo_id[@"promo_id"]];
    [(UINavigationController *)self.window.rootViewController pushViewController:pVC animated:YES];

    [(UINavigationController *)[UIApplication sharedApplication].keyWindow.rootViewController popViewControllerAnimated:YES ];

我能够在AppDelegate.m文件中接收和阅读促销ID。 当我运行上面的代码时,我得到以下错误。

  

MainViewController pushViewController:animated:]:无法识别   选择器发送到实例0x1459e980

任何正确方向的帮助都很棒!我做php和android,但Obj-C完全不同!

更新 将代码更改为:

    PromotionDetailViewController *pvc = [[PromotionDetailViewController alloc] initWithPromotionID:promo_id[@"promo_id"]];
    UINavigationController *promoNav =
    [[UINavigationController alloc] initWithRootViewController:pvc];
    self.window.rootViewController = promoNav;

现在API调用成功,我能够看到正确的NAV栏,但由于以下错误导致应用程序崩溃:

  

由于未捕获的异常终止应用' NSRangeException',原因:   ' *** - [__ NSArrayI objectAtIndex:]:索引0超出限制为空   阵列'

1 个答案:

答案 0 :(得分:0)

(UINavigationController *)self.window.rootViewController它似乎不是UINavigationController。

要获得正确的NavigationController,如果'self'已经是导航控制器的子控制器,则可以执行self.navigationController。

在obj-c中无法识别的选择器意味着你正在向一个没有响应的对象发送一条消息,因为你是用括号手动编译的,编译器不会抱怨并认为它实际上是一个NavgiationController,但是不是“T。