2017-04-04 21 views
0

私はplistをTableViewに読み込んでいますが、それはすべてOKですが、今はPage1にSearchBarを含めるようにしています。あなたは正しくのplistをロードするためにSearchBarの読み込みに問題があります

plist and storyboard

directory.plistと私のMain.storyboardを参照してください下に私が上で、次のコードを入れて、私の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 
} 

すべてのものをロード:

ここまではすべてがうまく動作しています。

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


EDIT 1 私は私が今までやったことを見て、SearchViewを挿入しようとしたときは今、私は問題を抱えなりましたヒントの後、唯一の問題は次のとおりです: enter image description here


EDITは、今、私はこれを持っています:employeesSearchingStringの定数配列であるため enter image description here

+0

それは全く別の問題についてですので、私はあなたの最後の変更をロールバック。必要に応じて新しい質問を投稿してください。 – rmaddy

答えて

1

エラーがあります。

おそらく可変配列Employeeが必要です。

変更:

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

へ:

var employeesSearching = [Employee]() 
+0

ニース!!今私は最後の問題を抱えています。最後の1行が間違っています。 –

+1

あなたはそのような質問をやり直すべきではありません。それは私の答えが不適切に見えるようにする。新しい画像を追加して追加エラーを表示します。しかし、おそらく、 'self.Shared.instance.items.count'の代わりに' Shared.instance.employees.count'が必要です。 – rmaddy

+0

私は以前のように私の質問をredid ...それはちょっと働いたが、他のトラブルが現れた。 ( ''Employee'型の値を指定された型 'String''に変換できません)そしてon(' ')' ' 60行目( 'タイプ' String 'の値を' Employee''予想される引数型に変換できません) –

関連する問題