前提・実現したいこと
Swift初学者です。
ToDoリストにメモした内容を遷移させて、URLに追加して検索をできるようにしたいと考えています。
コンパイルはできるのですが、Webに移動するボタンを押すとクラッシュしてしまいます。
CellにButtonを配置してSegueで遷移させようとしています。
エラーは
WebVC.link = self.memosA[(self.tableView.indexPathForSelectedRow?.row)!]
の部分に出ています。
よろしくお願いします。
発生している問題・エラーメッセージ
Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
該当のソースコード
import UIKit class FirstTableViewController: UITableViewController { let userDefaults = UserDefaults.standard // let userDefaults = UserDefaults.standard var memosA = [String]() var memosB = [String]() @IBAction func unwindToMemoList(sender: UIStoryboardSegue){ guard let sourceVC = sender.source as? SecondViewController, let memoA = sourceVC.food, let memoB = sourceVC.day else{ return } if let selectedIndexPath = self.tableView.indexPathForSelectedRow { self.memosA[selectedIndexPath.row] = memoA self.memosB[selectedIndexPath.row] = memoB } else { self.memosA.append(memoA) self.memosB.append(memoB) } self.userDefaults.set(self.memosA, forKey: "memosA") self.userDefaults.set(self.memosB, forKey: "memosB") self.tableView.reloadData() } override func viewDidLoad() { super.viewDidLoad() if self.userDefaults.object(forKey: "memosA") != nil { self.memosA = self.userDefaults.stringArray(forKey: "memosA")! } else { self.memosA = ["MemoA"] } if self.userDefaults.object(forKey: "memosB") != nil { self.memosB = self.userDefaults.stringArray(forKey: "memosB")! } else { self.memosB = ["MemoB"] } // if userDefaults.object(forKey: "memos") != nil { // self.memos = self.userDefaults.stringArray(forKey: "memos")! // } // Uncomment the following line to preserve selection between presentations // self.clearsSelectionOnViewWillAppear = false // Uncomment the following line to display an Edit button in the navigation bar for this view controller. // self.navigationItem.rightBarButtonItem = self.editButtonItem } // MARK: - Table view data source override func numberOfSections(in tableView: UITableView) -> Int { // #warning Incomplete implementation, return the number of sections return 1 } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { // #warning Incomplete implementation, return the number of rows return self.memosA.count } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "FirstTableViewCell", for: indexPath) // Configure the cell... cell.textLabel?.text = self.memosA[indexPath.row] cell.detailTextLabel?.text = self.memosB[indexPath.row] return cell } /* // Override to support conditional editing of the table view. override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { // Return false if you do not want the specified item to be editable. return true } */ // Override to support editing the table view. override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { if editingStyle == .delete { // Delete the row from the data source self.memosA.remove(at: indexPath.row) tableView.deleteRows(at: [indexPath], with: .fade) // } else if editingStyle == .insert { // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view } } /* // Override to support rearranging the table view. override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { } */ /* // Override to support conditional rearranging of the table view. override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { // Return false if you do not want the item to be re-orderable. return true } */ // MARK: - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // Get the new view controller using segue.destination. // Pass the selected object to the new view controller. guard let identifier = segue.identifier else { return } if identifier == "editMemo" { let SecondVC = segue.destination as! SecondViewController SecondVC.food = self.memosA[(self.tableView.indexPathForSelectedRow?.row)!] SecondVC.day = self.memosB[(self.tableView.indexPathForSelectedRow?.row)!] } else if identifier == "goWeb" { let WebVC = segue.destination as! WebViewController WebVC.link = self.memosA[(self.tableView.indexPathForSelectedRow?.row)!] } else { return } } }
試したこと
そもそも遷移できていないのかと思って、WebVC.link = "単語" などにすると遷移に成功してサイトが表示されます。
補足情報(FW/ツールのバージョンなど)
遷移先のコードです。
import UIKit import WebKit class WebViewController: UIViewController { var link: String? @IBOutlet weak var browserWebView: WKWebView! override func viewDidLoad() { super.viewDidLoad() // print(link!) let urlString = "https://dotinstall.com/(link!)" let encordingUrl: String = urlString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)! let urlRequest = URLRequest(url: URL(string: encordingUrl)!) self.browserWebView.load(urlRequest) // Do any additional setup after loading the view. } /* // MARK: - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // Get the new view controller using segue.destination. // Pass the selected object to the new view controller. } */ }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/02 09:13