This is my first application for iOS.
So I have a UIVIewController
with a UITableView
where I have integrated a UISearchBar
and a UISearchController
in order to filter TableCells to display
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() }
I am using also a modal segue in order to open the element's ViewController
where I will display details of the element.
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!] } } }
That works fine until I try to display the ItemDetailViewController
for a filtered element (through the UISearchController
).
I have the following message :
Warning: Attempt to present <ItemDetailViewController: *> on <HomeViewController: *> which is already presenting (null)
At every time I am going to the ItemDetailViewController.viewDidLoad()
function but after that when the search is activated I have the previous error.
Any idea ? I have tried to use the following async dispatch but without success
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { self.index = indexPath.row dispatch_async(dispatch_get_main_queue(), { () -> Void in self.performSegueWithIdentifier("ItemDetailFromHome", sender: self) }) }