## 余分な、Delegate。
tableView
でdequeueReusableCell
を使うため、: UITableViewCell
を記述した際に、
クラッシュしたため、UITableViewDelegate, UITableViewDataSource,
を追加したのですが、
エラーにて「余分なコード」だと言われました。
有効な解決策を教えて頂きたいです。
swift
1override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 2 3 let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) 4 let rp = repo[indexPath.row] 5 cell.textLabel?.text = rp["full_name"] as? String ?? "" 6 cell.detailTextLabel?.text = rp["language"] as? String ?? "" 7 cell.tag = indexPath.row 8 return cell 9 }
## エラー
冗長エラー。
Redundant conformance of 'SearchRootVC' to protocol 'UITableViewDataSource'
クラッシュエラー。
"unable to dequeue a cell with identifier cell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard"
## クラッシュ時の、全体コード
swift
1import UIKit 2 3class SearchRootVC: UITableViewController, UISearchBarDelegate { 4 5 @IBOutlet weak var searchBar: UISearchBar! 6 7 var repo: [[String: Any]]=[] 8 9 var task: URLSessionTask? 10 var word: String! 11 var url: String! 12 var idx: Int! 13 14 override func viewDidLoad() { 15 super.viewDidLoad() 16 17 // 元のコード1行削除。Main.storyboardにて、Placeholder使用。 18 19 // UISearchBarのdelegateプロパティに、self(=SearchRootVC)を代入。 20 searchBar.delegate = self 21 } 22 23 // 以下3つ、元から用意されているsearchBar関数名なので、変更NG。 24 func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool { 25 searchBar.text = "" 26 return true 27 } 28 29 func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) { 30 task?.cancel() 31 } 32 33 func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { 34 35 word = searchBar.text! 36 37 if word.count != 0 { 38 url = "https://api.github.com/search/repositories?q=(word!)" 39 task = URLSession.shared.dataTask(with: URL(string: url)!) { (data, res, err) in 40 if let obj = try! JSONSerialization.jsonObject(with: data!) as? [String: Any] { 41 if let items = obj["items"] as? [[String: Any]] { 42 self.repo = items 43 DispatchQueue.main.async { 44 self.tableView.reloadData() 45 } 46 } 47 } 48 } 49 // これ呼ばなきゃリストが更新されません 50 task?.resume() 51 } 52 53 } 54 55 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 56 if segue.identifier == "Detail" { 57 if let detailVC = segue.destination as? ProfileDetailVC { 58 detailVC.selectedUser = self 59 } 60 } 61 } 62 63 override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 64 return repo.count 65 } 66 67 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 68 69 let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) 70 let rp = repo[indexPath.row] 71 cell.textLabel?.text = rp["full_name"] as? String ?? "" 72 cell.detailTextLabel?.text = rp["language"] as? String ?? "" 73 cell.tag = indexPath.row 74 return cell 75 } 76 77 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 78 // 画面遷移時に呼ばれる 79 idx = indexPath.row 80 performSegue(withIdentifier: "Detail", sender: self) 81 } 82 83}
## 参考サイト
質問は以上です。
お時間あるときに、ご返信頂けましたら幸いです????
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/08 13:13