天儿真好,
我正在尝试在浏览器应用中检查用户输入的网址。目的是在用户不输入时添加http:// etc方案,并假设他们在Google搜索之后,如果它们在文本字段中包含任何空格。
我想我只是在那里,但是每当我输入不完整的URL并且没有空格的东西时,由于以下错误而崩溃。简单地说,
由于未捕获的异常'NSRangeException'而终止应用程序,原因:' - [__ NSCFString replaceCharactersInRange:withString:]:范围或索引越界'
我看过以下类似的问题而没有运气:
How to validate an(sic) url on the iphone
Checking if a string is a url objective c
这个问题与我的问题非常相似,但还没有得到很好的回答:
Correcting user submitted url in xcode objective c
请在下面找到我的代码
- (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;
}
感谢您提供任何帮助,非常感谢!
答案 0 :(得分:1)
如果网址没有空格,那么urlSpace
的{{1}} location
和NSNotFound
为0(或者是-1?)
在使用范围创建length
之前,您需要先检查一下。
因为你真的想要改变所有空间,所以不要简单地做:
urlNoSpace
这解决了两个问题:崩溃并且它取代了所有空格,而不仅仅是第一个空格。