在Objective C / XCode 6中检查用户输入的URL - NSRangeException

时间:2014-10-16 21:41:12

标签: ios objective-c xcode nsrangeexception

天儿真好,

我正在尝试在浏览器应用中检查用户输入的网址。目的是在用户不输入时添加http:// etc方案,并假设他们在Google搜索之后,如果它们在文本字段中包含任何空格。

我想我只是在那里,但是每当我输入不完整的URL并且没有空格的东西时,由于以下错误而崩溃。简单地说,

  • 输入'国家橄榄球联盟'将正确加载谷歌搜索词
  • 输入“http://www.nrl.com.au”正确加载NRL网页
  • 输入“www.nrl.com.au”会导致以下错误:

由于未捕获的异常'NSRangeException'而终止应用程序,原因:' - [__ NSCFString replaceCharactersInRange:withString:]:范围或索引越界'

我看过以下类似的问题而没有运气:

How to validate an(sic) url on the iphone

Checking if a string is a url objective c

NSRange crashing app

这个问题与我的问题非常相似,但还没有得到很好的回答:

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;

}

感谢您提供任何帮助,非常感谢!

1 个答案:

答案 0 :(得分:1)

如果网址没有空格,那么urlSpace的{​​{1}} locationNSNotFound为0(或者是-1?)

在使用范围创建length之前,您需要先检查一下。

因为你真的想要改变所有空间,所以不要简单地做:

urlNoSpace

这解决了两个问题:崩溃并且它取代了所有空格,而不仅仅是第一个空格。