こんばんは
ブラウザ アプリでユーザーが入力した URL を確認しようとしています。目的は、ユーザーが入力しない場合は http:// などのスキームを追加し、テキスト フィールド内にスペースが含まれている場合は Google 検索の後であると想定することです。
私はちょうどそこにいると思いますが、完全な URL ではなくスペースを含まないものを入力すると、次のエラーが原因でクラッシュします。簡単に言えば、
- 「ナショナル ラグビー リーグ」と入力すると、その検索語で Google が正しく読み込まれます
- 「 http://www.nrl.com.au 」と入力すると、NRL Web ページが正しく読み込まれます
- 「www.nrl.com.au」と入力すると、次のエラーが発生します。
キャッチされていない例外 'NSRangeException' が原因でアプリを終了しています。理由: '-[__NSCFString replaceCharactersInRange:withString:]: 範囲またはインデックスが範囲外です'
私は運がない次の同様の質問を見てきました:
この質問は私のものと非常に似ていますが、完全には答えられませんでした:
以下の私のコードを見つけてください
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
NSString *URLString = textField.text;
NSURL *URL = [NSURL URLWithString:URLString];
if (!URL.scheme) {
NSRange urlSpace = [URLString rangeOfString:@" "];
NSString *urlNoSpace = [URLString stringByReplacingCharactersInRange:urlSpace withString:@"+"];
if (urlSpace.location != NSNotFound) {
// The user typed a space so we assume it's a search engine query
URL = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.google.com/search?q=%@", urlNoSpace]];
} else {
// The user didn't type http: or https: for the scheme
URL = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@", URLString]];
}
}
if (URL) {
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
[self.webview loadRequest:request];
}
return NO;
}
ご協力いただきありがとうございます。