日本語を他のビューへの引き渡し値として使うと、エラーが起こる。
日本語で入力されたテキストをTableView
のセルに表示させ、その中で選択されたセルデータをURLに付け加え、UIWebViewを表示させたいのですが、表示できずクラッシュしてしまいます。しかし、英語文字であれば、問題なくその値が受け渡されるのを確認できました。なぜこれが起きているのでしょうか?日本語のキャラクターに対して、なにか特別なコードを記述しなければならないのでしょうか? ご教授お願いいたします。
MainController
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "detail" {
let cell = sender as! UITableViewCell
let indexPath = tableView.indexPath(for: cell)
let next = segue.destination as! DetailViewController
//arrayには日本語テキストが保存されています。しかし、
//日本語のセルを選択すると、エラーになり、fatal errorの表示が
//コンソールに表示されます。
//英語をセルに表示させて、選択するとエラーが起こらないです。
if let value = array[(indexPath?.row)!].word {
next.selectedWord = value
}
}
WebViewController
var selectedWord = ""
var _url : String?
override func viewDidLoad() {
super.viewDidLoad()
_url = "http://....(some website)...../\(selectedWord)"
webViewContentSetting(myUrl: _url!)
}
func webViewContentSetting(myUrl: String){
do {
let url = URL(string: myUrl)!
let request = URLRequest(url: url)
webView!.loadRequest(request)
self.view.addSubview(webView!)
} catch {
print("Error with request: \(error)")
}
}
UPDATE
let urlString = "http:...somewebsite....\(selectedWord)"
let encString = urlString.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed)
let myURl = Foundation.URL(string: encString!)
このコードを使うことで問題解決することができました。他にも私と同じバグに引っかかる人がいたということは、他にもいる、と思うのでここにソリューションを掲載しておきます。やはり私が思っていた通り、日本語文字には特別な記述が必要なのですね。協力してくださった方、ありがとうございました。