2015-09-18 4 views
-1

В раскадровке: NavigationController -> UITableViewControllerIssue Present View Controller с пользовательской схемой URL

appdelegate.swift

func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool { 
     let storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let navVC = storyboard.instantiateViewControllerWithIdentifier("navViewController") as! UINavigationController 

     if let tableVC = navVC.topViewController as? UITableViewController { 
      tableVC.searchText = // URL query param 
     }   
      self.window?.rootViewController?.presentViewController(navVC, animated: false, completion: nil)    
    } 

    return true 
} 

Проблема заключалась в том, когда я вхожу с пользовательским URL в Safari во второй раз

appUrl://search?q=... 

В первый раз, когда это нормально, откройте правильно, но если я вернусь в Safari, чтобы открыть другой URL, я получил

Warning: Attempt to present <UINavigationController: 0x7fb1fb090000> on <UINavigationController: 0x7fb1fa843400> whose view is not in the window hierarchy! 

ответ

0

Попробуйте

func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool 
{ 
    let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    let navVC = storyboard.instantiateViewControllerWithIdentifier("navViewController") as! UINavigationController 

    if let tableVC = navVC.topViewController as? UITableViewController 
    { 
     tableVC.searchText 
    } 

    if let presented = window?.rootViewController?.presentedViewController?.presentedViewController 
    { 
     presented.dismissViewControllerAnimated(false, completion: { 
      self.window?.rootViewController?.presentedViewController?.presentViewController(navVC, animated: false, completion: nil) 
     }) 
    } 
    else 
    { 
     self.window?.rootViewController?.presentedViewController?.presentViewController(navVC, animated: false, completion: nil) 
    } 

    return true 
} 
+0

Xcode жалуется на: '?' должен сопровождаться вызовом, поиском члена или индексом – user2258959

+0

Я немного изменился. Я нахожусь на своем iPad и не могу получить доступ к своему MacBook. ( –

+0

Я изменил на: (self.window? .rootViewController as! UINavigationController) .presentViewController (navVC, анимированный: false, завершение: ноль), но все равно получаю предупреждение – user2258959

1

Я думаю, что проблема в том, что rootViewController пытается представить два UIViewController который вызывает предупреждение message.How о представлении второй UIViewController на представленоUIViewController.

func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool { 
    let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    let navVC = storyboard.instantiateViewControllerWithIdentifier("navViewController") as! UINavigationController 

    if let tableVC = navVC.topViewController as? UITableViewController { 
     tableVC.searchText = // URL query param 
    }   
     self.window?.rootViewController?.presentedViewController?.presentViewController(navVC, animated: false, completion: nil)    
} 

return true 
} 
+0

Ну это работа! Спасибо, теперь я должен исправить другие проблемы = D – user2258959

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