检查包含"http://"URL的字符串

Pau*_*aul 5 cocoa-touch objective-c nsurl nsstring ios

我正在尝试检查用户输入的URL,但我正在对抗一些错误和警告.

-(BOOL) textFieldShouldReturn:(UITextField *)textField {
    //check "http://"
    NSString *check = textField.text;
    NSString *searchString = @"http://";
    NSRange resultRange = [check rangeWithString:searchString];
    BOOL result = resultRange.location != NSNotFound;
    if (result) {
        NSURL *urlAddress = [NSURL URLWithString: textField.text];
    } else {
        NSString *good = [NSString stringWithFormat:@"http://%@", [textField text]];
        NSURL *urlAddress = [NSURL URLWithString: good];
    }
    // open url
    NSURLRequest *requestObject = [NSURLRequest requestWithURL:urlAddress];
}
Run Code Online (Sandbox Code Playgroud)

他们说:

NSString可能无法响应-rangeWithString
未使用urlAddress的条件"if ... else"(对于两者)
urlAddress未声明:在URLRequest

有谁知道该怎么办?

Mor*_*ast 19

NSString响应rangeOfString:,而不是rangeWithString:.

变量urlAddress在if语句和else语句中声明.这意味着它只存在于该范围内.离开if/else语句后,变量就消失了.

对于URL,最好是以方案开头(如"http://"),并且您的代码很乐意接受apple.http://.com作为有效.

您可以使用该hasPrefix:方法,如下所示:

BOOL result = [[check lowercaseString] hasPrefix:@"http://"];
NSURL *urlAddress = nil;

if (result) {  
    urlAddress = [NSURL URLWithString: textField.text];
}
else {
    NSString *good = [NSString stringWithFormat:@"http://%@", [textField text]];
    urlAddress = [NSURL URLWithString: good];
}

NSURLRequest *requestObject = [NSURLRequest requestWithURL:urlAddress];
Run Code Online (Sandbox Code Playgroud)