2016-03-13 4 views
0

, когда пользователь получает push-уведомление и отбирает уведомление, он/она будет отправлен в мое приложение, где я хочу, чтобы появился определенный контроллер представления. Поэтому я использую центр уведомлений.Load ViewController при получении Push-уведомления

Мой вопрос: где мне нужно выполнить загрузку контроллера вида, чтобы он отображался и нажимался на стек навигации, когда пользователь входит в приложение?

func processReceivedRemoteNotification(userInfo:[NSObject:AnyObject]) { 

    let notification = userInfo as! Dictionary<String, AnyObject> 

    let json = JSON(notification) 

    // Get information from payload 
    let dispatchType:String = json["dispatch"]["dispatchType"].stringValue 

    switch dispatchType { 
    case "alert": 
     self.notificationCenter.postNotificationName("ALERT_RECEIVED", object: nil, userInfo: userInfo as [NSObject:AnyObject]) 
     break 
    default: 
     break 
    } 
} 

View Controller для загрузки

class AlertViewController: UIViewController { 

    let notificationCenter: NSNotificationCenter = NSNotificationCenter.defaultCenter() 

    override func viewWillAppear(animated: Bool) { 
     self.notificationCenter.addObserver(self, selector: "alertMessageReceived:", name: "ALERT_RECEIVED", object: nil) 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func alertMessageReceived(notification: NSNotification) { 
     let userInfo = notification.userInfo as! Dictionary<String, AnyObject> 
     print(userInfo) 
     let storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let vc1: AlertViewController = storyboard.instantiateViewControllerWithIdentifier("example1") as! AlertViewController 
     self.navigationController?.pushViewController(vc1, animated: true) 
    } 

ответ

0

Я не знаю, ваше приложение архитектуры, но из данного контекста я вижу, что у вас есть navigationController. В этом случае вы не должны добавлять в качестве наблюдателя AlertViewController. Вместо этого переместите этот код на другой контроллер представления, который уже нажат до navigationController. Другой вариант заключается в подклассе UINavigationController и уведомлении об этом "ALERT_RECEIVED".

+0

'processReceivedRemoteNotification' находится в AppDelegate. Поэтому я бы поставил код для загрузки VC непосредственно в оператор switch в методе выше? – sesc360

+0

Если у вас есть ссылка на ваш навигационный контроллер в AppDelegate, вы можете сделать это там. Можете ли вы показать мне код, где будет создан navigationController? – Misternewb

+0

на самом деле это сделано только в интерфейсе builder – sesc360

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