在构建用于搜索我正在构建的项目的工作类型列表的搜索栏时,我遇到一些问题。我收到许多红色的感叹号,它们表示“ tblSearchResults”是一个无法解析的标识符。

这是发生问题的项目源代码。

    func WorkTypeSearchable() {

    let pathToFile = NSBundle.mainBundle().pathForResource("work", ofType: "txt")

    if let path = pathToFile {

        let workString = String(contentsOfFile: path, encoding:
NSUTF8StringEncoding, error: nil)!

        let WorkTypeSearchable = workString.componentsSeparatedByString("\n")

        tblSearchResults.reloadData()
    }
}


您能解释一下为什么我会因为无法解析的标识符而出现错误,以及我的字符串“ workString = String(code)...出现错误...

我正在使用所有适当的类,如下所示:

class ViewController: UIViewController, UIPickerViewDataSource,
UIPickerViewDelegate, UITableViewDelegate, UITableViewDataSource,
UISearchResultsUpdating, UISearchBarDelegate {


请注意,我稍后还将在程序中使用选择器。

最佳答案

未解决的标识符错误表明Xcode找不到您定义tblSearchResults的位置。您是否连接了IBOutlet并初始化了委托?单独实现委托不会导致tblSearchResults指向所需的UITableView。

要创建IBOutlet,请打开助手编辑器,然后从UITableView按住Control并拖动到类声明的正下方,然后将类型更改为Outlet,并将名称更改为tblSearchResults。然后,您可能还想在viewDidLoad()中初始化委托和数据源,如下所示:

class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate, UITableViewDelegate, UITableViewDataSource, UISearchResultsUpdating, UISearchBarDelegate {
    @IBOutlet weak var tblSearchResults: UITableView!
    override func viewDidLoad() {
        tblSearchResults.delegate = self
        tblSearchResults.dataSource = self
        //Insert other initialization code here
    }
}


字符串初始化:Swift 1 vs.Swift 2

您提到使用的是Swift 2,它不再使用代码中使用的String initialization方法。有两个区别:


您必须使用NSString而不是String
您必须使用try语句


尝试以下操作:(请注意,这是不安全的,如果无法读取文件,则应用程序将崩溃)

let text2 = try! NSString(contentsOfFile: path, encoding: NSUTF8StringEncoding)

10-08 12:35