swift - 点击搜索栏时,应用程序崩溃

标签 swift swift3 swift4

点击搜索栏时,应用程序崩溃并出现以下错误:

不明白为什么?

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法使标识符为 ContactCell 的单元格出列 - 必须为标识符注册 Nib 或类,或者连接 Storyboard 中的原型(prototype)单元格”

这是我的代码:

import UIKit

class ContactViewController: UITableViewController, UISearchResultsUpdating {

    var dataSource: [Contact] = []
    var filteredResult = [Contact]()
    let searchController = UISearchController(searchResultsController: nil)

    override func viewDidLoad() {
        super.viewDidLoad()
        downloadJSONUrl()
    }

    func downloadJSONUrl() {
        let urlString = "https://us-central1-practo-contacts-sample.cloudfunctions.net/get"
        let url = NSURL(string: urlString)
        URLSession.shared.dataTask(with: (url as URL?)!, completionHandler: {(data, response , error) -> Void in
            if let jsonObj = try? JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? NSDictionary {
                if let NameArray = jsonObj?.value(forKey: "contacts") as? [[String: Any]] {
                    for names in NameArray {
                        var cont = Contact()
                        if let name = names["name"] as? String {
                            cont.name = name
                        }
                        if let ph = names["number"] as? String {
                            cont.phoneNumber = ph
                        }
                        self.dataSource.append(cont)
                    }
                    self.dataSource.sort {$0.name.lowercased() < $1.name.lowercased()}
                }
                OperationQueue.main.addOperation {
                    self.tableView.reloadData()
                }
            }
        }).resume()
    }

    // MARK: - Table view data source

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.dataSource.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "ContactCell", for: indexPath) as UITableViewCell
        let contact = self.dataSource[indexPath.row]
        cell.textLabel?.text = contact.name
        cell.detailTextLabel?.text = contact.phoneNumber
        return cell
    }

    func updateSearchResults(for searchController: UISearchController) {
        if searchController.searchBar.text! == "" {
            filteredResult = dataSource
        } else {
            filteredResult = dataSource.filter { $0.name.lowercased().contains(searchController.searchBar.text!.lowercased()) }
        }
        self.tableView.reloadData()
    }

   @IBAction func unwindToContactList(segue: UIStoryboardSegue) {
        guard let viewController =  segue.source as? AddOrEditViewController else { return }
        if let name = viewController.nameTextField.text, let phoneNumber =  viewController.phoneNumberTextField.text {
            let contact =  Contact(name: name, phoneNumber: phoneNumber)
            self.dataSource.append(contact)
            tableView.reloadData()
        }
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "contactDetailsSegue" {
            guard let viewController = segue.destination as? ContactDetialsViewController else {
                return
            }
            guard let indexPath = tableView.indexPathForSelectedRow else { return }
            let contact = self.dataSource[indexPath.row]
            viewController.contact = contact
        }
    }
}

最佳答案

您确定已为 Storyboard 上的单元格设置了标识符,并且标识符名称与代码“ContactCell”上使用的标识符名称相同吗?

关于swift - 点击搜索栏时,应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49402692/

相关文章:

ios - CNSaveRequest.addGroup 和 deleteGroup 不会立即更改联系人中的组

ios - Xib 导出 View swift 变为 nil

swift - lint 遗留构造函数违规 : (legacy_constructor) NSMakeRange in Swift?

ios - Swift 3 URLSession.shared() 对成员 'dataTask(with :completionHandler:) error (bug)) 的模糊引用

ios - 检测 View Controller 何时进入后台并恢复

swift - Reality Composer 和处理多个表面

ios - fatal error : subscript: subRange extends past String end Xcode

json - 在 Swift/Xcode 中将 JSON 文件转换为数组

iOS:如何以编程方式将 UI 从 LTR 更改为 RTL,反之亦然

Swift 相当于字符串文字接口(interface)吗? - `request(method: ' 帖子'|'put')`