簡體   English   中英

在取消分配時嘗試加載視圖控制器的視圖

[英]Attempting to load the view of a view controller while it is deallocating

我正在學習使用Search Bar和數據過濾實現TableView。 所以,我的storyboard有以下內容:

在此輸入圖像描述

我的UITableViewController連接到以下SearchTableViewController.swift類,如下所示:

import UIKit

class SearchTableViewController: UITableViewController, UISearchResultsUpdating {

    // table view controller properties
    let appleProducts = ["Mac", "iPhone", "Apple Watch", "iMac", "iPad"]
    var filteredAppleProducts = [String]()
    var resultSearchController = UISearchController()

    override func viewDidLoad() {
        super.viewDidLoad()

        // Configure result search controller
        self.resultSearchController = UISearchController(searchResultsController: nil)
        self.resultSearchController.searchResultsUpdater = self
        self.resultSearchController.dimsBackgroundDuringPresentation = false
        self.resultSearchController.searchBar.sizeToFit()
        self.resultSearchController.searchBar.placeholder = "Search Products"
        self.tableView.tableHeaderView = self.resultSearchController.searchBar
        self.tableView.reloadData()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    // MARK: - Table view data source

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if (self.resultSearchController.active) {
            return self.filteredAppleProducts.count
        } else {
            return self.appleProducts.count
        }
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as UITableViewCell

        if (self.resultSearchController.active) {
            cell.textLabel?.text = self.filteredAppleProducts[indexPath.row]
        } else {
            cell.textLabel?.text = self.appleProducts[indexPath.row]
        }

        return cell
    }

    func updateSearchResultsForSearchController(searchController: UISearchController) {
        self.filteredAppleProducts.removeAll(keepCapacity: false)
        let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text!)
        let resultArray = (self.appleProducts as NSArray).filteredArrayUsingPredicate(searchPredicate)
        self.filteredAppleProducts = resultArray as! [String]
        self.tableView.reloadData()
    }

}

運行正常,過濾按預期工作:

在此輸入圖像描述

但是,當應用程序在模擬器中運行時,我在調試窗口中收到以下警告:

2015-09-07 00:02:46.116 TableViewSearch [2415:68217]不允許在取消分配時嘗試加載視圖控制器的視圖,並可能導致未定義的行為()

任何想法如何解決這一問題?

我花了一整天時間來理解這個問題......有人說它與導航控制器問題有關,而其他人說這是一個小問題。 雖然這可能不是正確答案,但希望我能給出一些暗示。 如果您認為這不是一個正確的方法,請告訴我。 謝謝。 我的情況如下(因為不同的設計,我認為。)

var resultSearchController: UISearchController!()

然后,我必須在下面添加。

self.resultSearchController.loadViewIfNeeded()

只需更改以下行

var resultSearchController = UISearchController()

跟隨線

var resultSearchController:UISearchController!

你剩下的代碼都可以。 只需要進行一次更改。

如果您想查看詳細說明,請查看我在UISearchController上的教程

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM