困っていること
todoアプリを作っています。
以下の処理を行いたいと考えています。
①todoの内容を配列から検索
②検索結果をtableに表示
③tableから編集画面に画面遷移と値渡し←ここでクラッシュしてしまいます。
単純なtableを用いた画面遷移だと思うのですがうまくいきません。
該当コード
検索元のソースコード
swift
1class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource, CLLocationManagerDelegate,UISearchResultsUpdating{ 2 3import UIKit 4import CoreLocation 5import RealmSwift 6import Foundation 7 8省略 9 override func viewWillAppear(_ animated: Bool) { 10 super.viewWillAppear(animated) 11省略 12 13 //MARK:-検索しょり 14 definesPresentationContext = true 15 16 resultsController = resultsViewController() 17 18 searchController = UISearchController(searchResultsController: resultsController) 19 searchController.dimsBackgroundDuringPresentation = true 20 //検索するときにナビゲーションバーを隠したいから書いている 21 searchController.hidesNavigationBarDuringPresentation = true 22 //書いたものをリアルタイムに確認したいから書いている 23 searchController.searchResultsUpdater = self 24 //なにもないときは検索バーを隠したいからtrueにしている 25 navigationItem.hidesSearchBarWhenScrolling = true 26 navigationItem.searchController = searchController 27 リストテーブル.register(UITableViewCell.self, forCellReuseIdentifier: "セル") 28 29 30 } 31 32 //MARK:-検索して箱にいれる処理 33 func updateSearchResults(for searchController: UISearchController) { 34 if let keyword = searchController.searchBar.text, !keyword.isEmpty { 35 //resultcotrollerのアイテムにキーワードが入ってる単語をいれる 36 resultsController.items = 日記を入れる箱realm.filter { $0.contains(keyword) 37 38 39 //realm読み込み 40 var 検索結果:[String] = [] 41 var 検索結果id:[String] = [] 42 let realm = try! Realm() 43 //ソートしたい項目を複数追加できる、上のものを優先する 44 let sortProperties = [ 45 SortDescriptor(keyPath: "通知日", ascending: true), 46 ] 47 48 49 //おそらくobjectiveCで全角でエラーになるので%Kに「タイトル」を挿入することでそのエラーを回避している 50 51 let sortRealm = realm.objects(todo.self).sorted(by: sortProperties).filter("%K CONTAINS %d", "タイトル",keyword) 52 53 for todo in sortRealm{ 54 検索結果.append(todo.タイトル) 55 検索結果id.append(todo.id) 56 } 57 resultsController.検索結果id = 検索結果id 58 resultsController.検索結果 = 検索結果 59 print(検索結果) 60 return true 61 } 62 } else { 63 resultsController.items = [] 64 } 65 } 66省略
検索結果のソースコード
swift
1 2import UIKit 3class resultsViewController: UITableViewController{ 4 5 6 var 検索結果id:[String] = [] 7 var items:[String] = [] 8 9 10 //配列内が更新されたら表も更新される処理 11 var 検索結果: [String] = []{ 12 didSet { 13 if isViewLoaded { 14 tableView.reloadData() 15 } 16 } 17 } 18 override func viewDidLoad() { 19 super.viewDidLoad() 20 tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell") 21 } 22 override func numberOfSections(in tableView: UITableView) -> Int { 23 return 1 24 } 25 26 override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 27 return 検索結果.count 28 } 29 30 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 31 let item = 検索結果[indexPath.row] 32 let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) 33 cell.textLabel?.text = item 34 return cell 35 } 36 37 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 38 let 検索結果から編集へ = self.storyboard?.instantiateViewController(identifier: "HenshuuViewController") as! HenshuuViewController 39 検索結果から編集へ.idを受け取る箱 = 検索結果id[indexPath.row] 40 41 navigationController?.pushViewController(検索結果から編集へ, animated: true) 42 } 43 44} 45
エラーメッセージ
swift
1let 検索結果から編集へ = self.storyboard?.instantiateViewController(identifier: "HenshuuViewController") as! HenshuuViewController
クラッシュ時、該当のコードのところに「EXC_BAD_INSTRUCTION」、というエラーメッセージが表示されています。
コンソール画面にはエラーメッセージは何も表示されません。
最後に
拙い質問で恐縮ですが教えて頂ければ嬉しいです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/07 07:20