2015-09-21 27 views
24

這是我第一次在iOS上使用。警告:嘗試在*上顯示*(已提交)(空)

所以我有一個UIVIewControllerUITableView,我已經集成了一個UISearchBar,並以過濾TableCells顯示

override func viewDidLoad() { 
    menuBar.delegate = self 
    table.dataSource = self 
    table.delegate = self 
    let nib = UINib(nibName: "ItemCellTableViewCell", bundle: nil) 
    table.registerNib(nib, forCellReuseIdentifier: "Cell") 

    let searchButton = UIBarButtonItem(barButtonSystemItem: .Search, target: self, action: "search:") 
    menuBar.topItem?.leftBarButtonItem = searchButton 
    self.resultSearchController = ({ 
     let controller = UISearchController(searchResultsController: nil) 
     controller.searchResultsUpdater = self 
     controller.dimsBackgroundDuringPresentation = false 
     return controller 
    })() 
    self.table.reloadData() 
} 

我爲了打開也使用模式賽格瑞一個UISearchController元素的ViewController哪裏我將顯示元素的細節。

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    self.index = indexPath.row 
    self.performSegueWithIdentifier("ItemDetailFromHome", sender: self) 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if (segue.identifier == "ItemDetailFromHome") { 
     let settingsVC = segue.destinationViewController as! ItemDetailViewController 
     settingsVC.parent = self 
     if self.isSearching == true && self.searchText != nil && self.searchText != "" { 
      settingsVC.item = self.filteredItems[self.index!] 
     } else { 
      settingsVC.item = self.items[self.index!] 
     } 

    } 
} 

直到我嘗試顯示ItemDetailViewController的過濾元件(通過UISearchController)工作正常。

我有以下消息:

Warning: Attempt to present <ItemDetailViewController: *> on <HomeViewController: *> which is already presenting (null) 

在每一個我要去ItemDetailViewController.viewDidLoad()功能的時間,但之後當搜索被激活我以前的錯誤。

有什麼想法?我試圖使用下面的異步調度,但沒有成功

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    self.index = indexPath.row 
    dispatch_async(dispatch_get_main_queue(), {() -> Void in 
     self.performSegueWithIdentifier("ItemDetailFromHome", sender: self) 
    }) 
} 
+0

如果你是從的tableview控制器不需要調用self.performSegueWithIdentifier(」設置ItemDetailFromHome ItemDetailFromHome「,sender:self)in index select path in index path – Johnykutty

+0

實際上'ItemDetailViewController'將是一個由幾個segue/viewController(相互關聯)使用的視圖。 – Splendf

+0

太棒了,我該怎麼做?在cellForRowAtIndexPath? 我剛剛看到了一些有關performSegue – Splendf

回答

42

我已經找到了解決方案。

我在HomeViewController.viewDidLoad中添加了下面的代碼,那可行!

definesPresentationContext = true 
+0

這也適用於我。謝謝! –

+33

你能解釋爲什麼這能解決問題嗎? – Shahar

+0

拯救我的生命夥計! – PeiweiChen

1

我面臨同樣的問題 我所做的是從界面生成器選擇我賽格瑞 它的種類是「當前模態」 及其介紹的是「在目前情況下」

我改變了演示文稿到「默認」,然後它爲我工作。

15

在我的情況下,我發現我的代碼顯示新的viewController(一個UIAlertController)被調用兩次。

檢查此之前與definesPresentationContext搞亂。

+0

謝謝你的作品。 – Leo

+2

似乎幾乎愚蠢,但我敢打賭絕大多數情況下,這將是正確的答案。果然,我找到了第二個電話...... –

+0

是的,在某些情況下,我們需要在呈現之前檢查'presentedViewController' – onmyway133

0

這發生在我的項目上。我提出了我們的登錄/註銷ViewController作爲彈出窗口。但每當我試圖重新登錄了一次又一次顯示彈出式結束後,我得到這個登出我的控制檯:

Warning: Attempt to present UIViewController on <MY_HOME_VIEW_CONTROLLER> which is already presenting (null)

我的猜測是,彈出了仍然被關押在我即使它不可見,也可以使用ViewController

但是你正試圖以顯示新ViewController,下面的代碼我用來解決這個問題應該爲你工作:

func showLoginForm() { 

    // Dismiss the Old 
    if let presented = self.presentedViewController { 
     presented.removeFromParentViewController() 
    } 

    // Present the New 
    let storyboard = UIStoryboard(name: "MPTLogin", bundle: Bundle(for: MPTLogin.self)) 
    let loginVC = storyboard.instantiateViewController(withIdentifier: "LogInViewController") as? MPTLogInViewController 
    let loginNav = MPTLoginNav(rootViewController: loginVC!) 
    loginNav.modalPresentationStyle = .pageSheet; 
    self.present(loginNav, animated: true, completion: nil) 
} 
0

在我來說,我是想在某個時候呈現UIAlertController在同一UINavigationController中使用UISearchController後,應用的使用壽命。

我沒有正確使用UISearchController,並且在解僱前忘記了設置searchController.isActive = false。後來在應用程序中,我嘗試提供警報,但搜索控制器雖然當時不可見,但仍在控制顯示上下文。

0

這就是我最後的工作,因爲我的項目並不完全具有NavigationVC,而是個人獨立的VC。作爲廈門國際銀行文件

此代碼產生的錯誤:

present(alertVC, animated: true, completion: nil) 

此代碼固定的bug:

if presentedViewController == nil{ 
     navigationController?.present(alertVC, animated: true, completion: nil) 
    } 
相關問題