Проверьте строку, содержащую URL для "http://" - PullRequest
5 голосов
/ 30 июня 2011

Я пытаюсь проверить введенный пользователем 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];
}

Они говорят:

NSString может не отвечать на -rangeWithString
Неиспользуемая переменная urlAddress в условии «если… еще» (для обоих)
urlAddress необъявленный: в URLRequest

Кто-нибудь знает, что делать?

Ответы [ 6 ]

19 голосов
/ 30 июня 2011

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];
4 голосов
/ 05 июля 2013
if ( [[url lowercaseString] hasPrefix:@"http://"] )
    return url;
else
    return [NSString stringWithFormat:@"http://%@", url];
1 голос
/ 30 июня 2011

Полагаю, вам нужен метод rangeOfString .

0 голосов
/ 20 сентября 2018

Используйте это

NSString *stringUrl = url.absoluteString;

if ([stringUrl localizedCaseInsensitiveContainsString:@"your string"]) {
    //do something
}

Сначала он преобразует URL в строку, а затем проверяет, содержит ли этот URL вашу строку

0 голосов
/ 10 октября 2017

Если у вас есть NSURL, преобразуйте его в NSString с помощью

   NSString stringURL = url.absoluteString

Затем проверьте, содержит ли эта NSString http: // с этим кодом

 [stringURL containsString: @"http://"]


    - (BOOL)containsString:(NSString *)string {
    return [self containsString:string caseSensitive:NO];
}

- (BOOL)containsString:(NSString*)string caseSensitive:(BOOL)caseSensitive {
    BOOL contains = NO;
    if (![NSString isNilOrEmpty:self] && ![NSString isNilOrEmpty:string]) {
        NSRange range;
        if (!caseSensitive) {
            range =  [self rangeOfString:string options:NSCaseInsensitiveSearch];
        } else {
            range =  [self rangeOfString:string];
        }
        contains = (range.location != NSNotFound);
    }

    return contains;
}
0 голосов
/ 30 июня 2011

Чтобы избавиться от urlAddress предупреждений, вы должны объявить NSURL *urlAddress выше if..else:

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