gpt4 book ai didi

ios - 在解除分配时尝试加载 View Controller 的 View

转载 作者:搜寻专家 更新时间:2023-10-31 22:02:59 25 4
gpt4 key购买 nike

我正在学习使用搜索栏和数据过滤来实现 TableView。所以,我的 storyboard 中有以下内容:

enter image description here

我的 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()
}

}

这运行良好并且过滤按预期工作:

enter image description here

但是,当应用程序在模拟器中运行时,我在调试窗口中收到以下警告:

2015-09-07 00:02:46.116 TableViewSearch[2415:68217] Attempting to load the view of a view controller while it is deallocating is not allowed and may result in undefined behavior ()

有什么办法解决这个问题吗?

最佳答案

我也花了一整天的时间来理解这个问题......有人说它与导航 Controller 问题有关,也有人说这是一个小故障。虽然这可能不是正确的答案,但希望我能给出一些提示。如果您认为这不是正确的方法,请告诉我。谢谢。我的情况改为如下(我认为是因为不同的设计。)

var resultSearchController: UISearchController!()

然后,我不得不在下面添加。

self.resultSearchController.loadViewIfNeeded()

关于ios - 在解除分配时尝试加载 View Controller 的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32429185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com