Предупреждение: Попытка представить, чье представление не находится в иерархии окон! в UISearchController

У меня ошибка с UITableViewController и "UISearchController". Я делал по другому. Я написал self.definesPresentationContext = true в viewDidLoad, но получил ту же ошибку.

Предупреждение: Попытка представить, чье представление не находится в иерархии окон!

Пожалуйста помоги.

Мой код viewDidLoad

    override func viewDidLoad() {
    super.viewDidLoad()

    self.navigationItem.leftBarButtonItem = self.editButtonItem()

    fetchedResultsController = NSFetchedResultsController(fetchRequest: allEmployeesFetchRequest(), managedObjectContext: managedObjectContext!, sectionNameKeyPath: "mynote", cacheName: "mynote") // both mynote
    fetchedResultsController?.delegate = self
    fetchedResultsController?.performFetch(nil)

    self.searchController = ({
        var controllerS = UISearchController(searchResultsController: nil)
        controllerS.delegate = self
        controllerS.searchBar.delegate = self
        controllerS.searchResultsUpdater = self
        controllerS.searchBar.sizeToFit()
        controllerS.dimsBackgroundDuringPresentation = false
        controllerS.hidesNavigationBarDuringPresentation = false
     //   self.definesPresentationContext = true
        self.tableView.tableHeaderView = controllerS.searchBar
        return controllerS
    })()
}

Мой код prepareForSegue

  override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
    if segue.identifier == "showDetail" {
        if let indexPath = self.tableView.indexPathForSelectedRow() {
            if searchPredicate == nil {
            let object = self.fetchedResultsController!.objectAtIndexPath(indexPath) as! NSManagedObject
            let controller = (segue.destinationViewController as! UINavigationController).topViewController as! DetailViewController //DetailViewController
                controller.detailItem = object
            } else {
                let object = filteredObjects![indexPath.row] as Note
                let controller = (segue.destinationViewController as! UINavigationController).topViewController as! DetailViewController
                controller.detailItem = object
            }
        }
        self.searchController.active = false
    }
}

ОБНОВЛЕНИЕ Если я сделал self.definesPresentationContext = true, мне нужно нажать два раза на кнопку «Назад», чтобы вернуться на UITableViewController из SecondViewController


person Alexander Khitev    schedule 16.06.2015    source источник
comment
Нет, вылезла ошибка Brocked block   -  person Alexander Khitev    schedule 16.06.2015
comment
это работает, если вы делаете то же самое в viewDidAppear?   -  person Joe Smith    schedule 16.06.2015
comment
Это работает, но мне нужно нажать два раза на кнопку «Назад», чтобы вернуться в UITableViewController из SecondViewController. Почему?   -  person Alexander Khitev    schedule 16.06.2015
comment
Что вы имеете в виду под коснуться два раза?   -  person Praveen Gowda I V    schedule 17.06.2015
comment
Мне нужно коснуться два раза кнопки «Назад», чтобы вернуться из UIViewController (второй контроллер) в UITableViewController (первый контроллер). Если я использую этот код.   -  person Alexander Khitev    schedule 17.06.2015


Ответы (1)


Я исправил свой код, и он работает.

 var searchController: UISearchController!

func updateSearchResultsForSearchController(searchController: UISearchController) {
    self.dataSearchResults?.removeAll(keepCapacity: false)
    var searchText = searchController.searchBar.text
    var query: PFQuery = PFQuery(className: "NewsNow")
    if searchController.active == true  {
        query.whereKey("nameNews", matchesRegex: searchText, modifiers: "i")
        self.tableView.reloadData() // 4 win!!!
    }
    query.findObjectsInBackgroundWithBlock { (results:[AnyObject]?, error: NSError?) -> Void in
        self.dataSearchResults = results as? [PFObject]
        self.tableView.reloadData()
    }
     println(searchText)
}

func searchBar(searchBar: UISearchBar, selectedScopeButtonIndexDidChange selectedScope: Int) {
    updateSearchResultsForSearchController(searchController)
}

func didDismissSearchController(searchController: UISearchController) {
    self.dataSearchResults = nil //nil
    self.tableView.reloadData()
}

    override func viewDidLoad() {
    super.viewDidLoad()
    var object: PFObject?

    var query = PFQuery(className: "NewsNow")
    query.getFirstObjectInBackgroundWithBlock { (object, error) -> Void in
        if error == nil {
            var imageFile: PFFile = object!.objectForKey("imageNews") as! PFFile
        }
    }

    self.searchController = ({
        var controllerSearch = UISearchController(searchResultsController: nil)
        controllerSearch.delegate = self
        controllerSearch.searchBar.delegate = self
        controllerSearch.searchResultsUpdater = self
        controllerSearch.dimsBackgroundDuringPresentation = false
        controllerSearch.hidesNavigationBarDuringPresentation = true
        controllerSearch.hidesBottomBarWhenPushed = true
        controllerSearch.searchBar.sizeToFit()
        controllerSearch.definesPresentationContext = false  //default false
        self.tableView.tableHeaderView = controllerSearch.searchBar
        return controllerSearch
    })()
}

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    var imagePass: UIImage! // image
    var nameTextPass: String! // name
    var allTextPass: String! // all text in string
    var textURLPass: String! // url of news
    var dateTextPass: String! // data of news

    if segue.identifier == "showParse" || segue.identifier == "showDetailParse" {
        if let indexPath = self.tableView.indexPathForSelectedRow() {
            if let detailController = (segue.destinationViewController as! UINavigationController).topViewController as? DetailViewController {

                var currentCell = tableView.cellForRowAtIndexPath(indexPath) as! ParseTableViewCell

                imagePass = currentCell.imageViewCell.image
                detailController.image = imagePass

                nameTextPass = currentCell.labelNameText.text
                detailController.textName = nameTextPass

                allTextPass = currentCell.labelText
                detailController.textOfText = allTextPass

                // link on the news
                textURLPass = currentCell.labelURLNews
                detailController.textOfURL = textURLPass

                dateTextPass = currentCell.labelDataText.text 
                detailController.dateNewsDetail = dateTextPass

            }
        }
    }
}
person Alexander Khitev    schedule 05.07.2015