2015-07-16 3 views
0

Я пытаюсь добавить функциональность, чтобы открыть определенный контроллер представления при открытии уведомления в моем приложении iOS. Поскольку я новичок в iOS, у меня есть несколько сомнений.MainViewController pushViewController: анимированный:]: нераспознанный селектор отправлен в экземпляр 0x1459e980

Я написал бэкэнд, который отправляет рекламный идентификатор в качестве настраиваемого параметра. Я могу получить объект JSON на XCode, прочитать ID как NSString.

Теперь я хочу открыть 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 ]; 

Я могу получить и прочитать промо ID в файле AppDelegate.m. Когда я запускаю приведенный выше код, я получаю следующую ошибку.

MainViewController pushViewController:animated:]: unrecognized selector sent to instance 0x1459e980

Любая помощь в правильном направлении - это здорово! Я делаю php и android, но Obj-C совсем другой!

UPDATE Изменен код для этого:

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

Теперь вызов API успешно, я в состоянии видеть правильный бар NAV, но сбои приложения из-за следующей ошибки:

Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 0 beyond bounds for empty array'

ответ

0

(UINavigationController *) self.window.rootViewController кажется, что это не UINavigationController.

Чтобы получить правильный навигационный контроллер, вы можете сделать self.navigationController, если «я» уже является дочерним контроллером навигационной системы.

В obj-c Неопознанный селектор означает, что вы отправляете сообщение объекту, который не отвечает на него, поскольку вы вручную его скопируете с помощью скобки, компилятор не жалуется и считает, что на самом деле является NavgiationController, но нет.

+0

Спасибо, я обновил свой вопрос. – pixelscreen

Смежные вопросы