Проверьте, есть ли у URL-адреса http://префикс


В моем приложении, когда пользователь добавляет объект, вы также можете добавить ссылку для этого объекта, а затем ссылку можно открыть в webView.
Я попытался сохранить ссылку без префикса http://, а затем открыть ее в webView, но не могу ее открыть!
Прежде чем WebView начнет загрузку, существует ли способ проверить, имеет ли URL-адрес сохраненный http://префикс? И если он не получил его, как я могу добавить префикс к URL?
Спасибо!

Ответы

Ответ 1

Вы можете использовать метод - (BOOL)hasPrefix:(NSString *)aString на NSString, чтобы узнать, начинается ли NSString, содержащий ваш URL с префиксом http://, и если не добавить префикс.

NSString *myURLString = @"www.google.com";
NSURL *myURL;
if ([myURLString.lowercaseString hasPrefix:@"http://"]) {
    myURL = [NSURL URLWithString:myURLString];
} else {
    myURL = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@",myURLString]];
}

Я сейчас вдалеке от моего mac и не могу скомпилировать/протестировать этот код, но я считаю, что вышеприведенное должно работать.

Ответ 2

NSString * urlString = ...;
NSURL * url = [NSURL URLWithString:urlString];
if (![[url scheme] length])
{
  url = [NSURL URLWithString:[@"http://" stringByAppendingString:urlString]];
}

Ответ 3

Я не уверен, есть ли способ проверить это, но вы проверяете его в коде.

попробуйте использовать

NSRange range = [urlString rangeOfString:@"http://"];
if (range.location != NSNotFound)
    // Add http://  

Ответ 4

Я написал расширение для String в Swift, чтобы увидеть, что строка url получила http или https

extension String{

    func isValidForUrl()->Bool{

        if(self.hasPrefix("http") || self.hasPrefix("https")){
            return true
        }
        return false
    }
}

if(urlString.isValidForUrl())
    {
      //Do the thing here.
}

Ответ 5

Если вы проверяете "http://", вам, вероятно, понадобится поиск без учета регистра:

// probably better to check for just http instead of http://
NSRange prefixRange = 
    [temp rangeOfString:@"http" 
                options:(NSAnchoredSearch | NSCaseInsensitiveSearch)];
if (prefixRange.location == NSNotFound)

Хотя я думаю, что проверка схемы URL - лучший ответ в зависимости от ваших обстоятельств, поскольку URL-адреса могут начинаться с http или https и других префиксов в зависимости от вашего использования.

Ответ 6

Сначала вы должны создать новую категорию для NSURL: Файл > Новый файл > Objective-C Категория. Вы можете вызвать категорию что-то по строкам HTTPURLWithString, сделать ее категорией NSURL, нажать следующую и добавить ее в свою цель. Затем в NSURL + HTTPURLFromString.m реализовано следующее сообщение (и объявите сообщение в вашем .h)

@implementation NSURL (HTTPURLFromString)
+(NSURL *)HTTPURLFromString:(NSString *)string
{
    NSString *searchString = @"http";
    NSRange prefixRange = [string rangeOfString:searchString options:(NSCaseInsensitiveSearch | NSAnchoredSearch)];

    if (prefixRange.length == 4) {
        return [NSURL URLWithString:string];
    }
    return [NSURL URLWithString:[NSString stringWithFormat:@"http://%@", string]];

}
@end

Чтобы открыть ссылку в WebView, просто

NSString *urlString = @"www.google.com";
NSURL *url = [NSURL HTTPURLFromString:urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webView.mainFrame loadRequest:request];