2017-04-04 54 views
0

我正在將我的plist加載到TableView中,並且它一切正常,但現在我正在嘗試在Page1中包含一個SearchBar。下面你看到的directory.plist和我Main.storyboard搜索欄加載plist的問題

plist and storyboard

要正確加載的plist我把下面的代碼放在我的didFinishLaunchingWithOptions

class AppDelegate: UIResponder, UIApplicationDelegate { 

    var window: UIWindow? 

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
     if let url = Bundle.main.url(forResource: "directory", withExtension: "plist"), let array = NSArray(contentsOf: url) as? [[String:Any]] { 
      Shared.instance.employees = array.map{Employee(dictionary: $0)} 
     } 
     return true 
} 

我也有一個結構幫助我加載所有我的東西:

struct EmployeeDetails { 
    let functionary: String 
    let imageFace: String 
    let phone: String 

    init(dictionary: [String: Any]) { 
     self.functionary = (dictionary["Functionary"] as? String) ?? "" 
     self.imageFace = (dictionary["ImageFace"] as? String) ?? "" 
     self.phone = (dictionary["Phone"] as? String) ?? "" 
    } 
} 
struct Employee { 
    let position: String 
    let name: String 
    let details: [EmployeeDetails] // [String:Any] 

    init(dictionary: [String: Any]) { 
     self.position = (dictionary["Position"] as? String) ?? "" 
     self.name = (dictionary["Name"] as? String) ?? "" 

     let t = (dictionary["Details"] as? [Any]) ?? [] 
     self.details = t.map({EmployeeDetails(dictionary: $0 as! [String : Any])}) 
    } 
} 

struct Shared { 
    static var instance = Shared() 
    var employees: [Employee] = [] 
} 

直到這裏,一切都運行良好!現在我成了有問題,當我試圖插入一個搜索查看,看看我做了什麼至今:

class Page1: UITableViewController, UISearchBarDelegate { 

    @IBOutlet weak var searchBar: UISearchBar! 

    let employeesSearching: [String] = [String]() //now using: var employeesSearching = [Employee]() 
    var isSearching : Bool = false 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.searchBar.delegate = self 
    } 

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

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     if self.isSearching == true { 
      return self.employeesSearching.count 
     } else { 
      return Shared.instance.employees.count 
     } 
    } 

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell1 
     let employee = Shared.instance.employees[indexPath.row] 

     if self.isSearching == true { 
      cell.nameLabel.text = self.employeesSearching[indexPath.row].name 
      cell.positionLabel.text = self.employeesSearching[indexPath.row].position 
     } else { 
      cell.nameLabel.text = employee.name 
      cell.positionLabel.text = employee.position 
     } 
     return cell 
    } 

    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) { 
     if self.searchBar.text!.isEmpty { 
      self.isSearching = false 
      self.tableView.reloadData() 
     } else { 
      self.isSearching = true 
      self.employeesSearching.removeAll(keepingCapacity: false) 
      for i in 0..<self.Shared.instance.itens.count { 
       let listItem : String = self.Shared.instance.itens[i] 
       if listItem.lowercased().range(of: self.searchBar.text!.lowercased()) != nil { 
        self.employeesSearching.append(listItem) 
       } 
      } 
      self.tableView.reloadData() 
     } 
    } 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if let destination = segue.destination as? Page2, 
      let indexPath = tableView.indexPathForSelectedRow { 
      destination.newPage = Shared.instance.employees[indexPath.row] 
     } 
    } 

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

這些都是完全相同的錯誤: enter image description here


編輯1 提示後,現在唯一的麻煩是: enter image description here


編輯2 現在我有這樣的: enter image description here

+0

我回滾你最後的變化,因爲它是關於一個完全不同的問題。根據需要發佈新問題。 – rmaddy

回答

1

的錯誤是因爲employeesSearchingString恆定陣列。

您可能需要一個Employee的變量數組。

變化:

let employeesSearching: [String] = [String]() 

到:

var employeesSearching = [Employee]() 
+0

不錯!現在我有最後一個麻煩了,我只是更新了這個問題來向你展示。最後一行錯誤。 –

+1

你不應該重做你的問題。這讓我的回答看起來不合適。如果有的話,添加新的圖像來顯示額外的錯誤。但是你可能想要'Shared.instance.employees.count'而不是'self.Shared.instance.items.count'。 – rmaddy

+0

我重複了我的問題,像以前一樣...它有點奏效,但出現了其他麻煩。在第58行('Value'type''page1'沒有成員'Shared'),當我刪除self時,我看到:(''不能將類型'Employee'的值轉換爲指定類型'String')第60行('不能將'String'類型的值轉換爲期望的參數類型'Employee'') –