Проверка интернета не работает во всех приложениях ios устройства - PullRequest
0 голосов
/ 22 января 2012

Я новый разработчик для iPhone. Я создал приложение для iOS, где проверил проверку доступности интернета.

Я использовал следующий метод:

-(BOOL)connectedToInternet
{
   NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"]
                                                  encoding:NSStringEncoding
                                                     error:nil];
   return ( URLString != NULL ) ? YES : NO;
}

В applicationDidFinishLaunching я вызвал метод и покажу предупреждение, если нет соединения, иначе войдите во второй экран.

Я загрузил приложение на свой iPhone (iOS 4.3.1) и iPad (iOS 4.3.3). Это успешно работает.

Но мой клиент сказал, что он загружает на свой iPhone (iOS 4.3.5), и он всегда показывает предупреждение «Нет подключения к Интернету».

Я искал несколько сайтов, чтобы найти проблему и окончательное решение. Но я не нашел в чем моя вина и почему приложение не работает на всех устройствах.

Ответы [ 4 ]

4 голосов
/ 22 января 2012

Прежде всего, это плохой способ проверки подключения.Взгляните на пример кода Reachability от Apple.

Во-вторых, вы сделали это:

NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"] encoding:NSStringEncoding   error:nil];

Прекратите передачу nil в качестве параметра ошибки.

NSError *error;
NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"] encoding:NSStringEncoding error:&error];

Если URLString возвращается nil, укажите error в своем предупреждении.

1 голос
/ 22 января 2012

Ну, лично я использую следующую технику для проверки доступности Интернета (будь то WiFi или 3G).Я добавляю специальный класс для этого (в моем случае я называю это WiFiCheckClass), и в файле .h я делаю:

#import <Foundation/Foundation.h>
#import "SystemConfiguration/SCNetworkReachability.h"

@interface UIDevice (DeviceConnectivity)
+(BOOL) cellularConnected;
+(BOOL) wiFiConnected;
+(BOOL) networkConnected;
@end

И в файле .m я делаю:

#import "WiFiCheckClass.h"

@implementation UIDevice (DeviceConnectivity)

+(BOOL) cellularConnected
{
    SCNetworkReachabilityFlags  flags = 0;
    SCNetworkReachabilityRef netReachability;
    netReachability = SCNetworkReachabilityCreateWithName(CFAllocatorGetDefault(), [@"www.google.com" UTF8String]);
    if(netReachability)
    {
        SCNetworkReachabilityGetFlags(netReachability, &flags);
        CFRelease(netReachability);
    }
    if(flags & kSCNetworkReachabilityFlagsIsWWAN) return YES;
    return NO;
}

+(BOOL) networkConnected
{
    SCNetworkReachabilityFlags flags = 0;
    SCNetworkReachabilityRef netReachability;
    BOOL  retrievedFlags = NO;
    netReachability = SCNetworkReachabilityCreateWithName(CFAllocatorGetDefault(), [@"www.google.com" UTF8String]);
    if(netReachability)
    {
        retrievedFlags  = SCNetworkReachabilityGetFlags(netReachability, &flags);
        CFRelease(netReachability);
    }
    if (!retrievedFlags || !flags) return NO;
    return YES;
}

+(BOOL) wiFiConnected
{
    if ([self cellularConnected]) return NO;
    return [self networkConnected];
}

@end

Теперь, когда мне нужно узнать, есть ли подключение к Интернету, я импортирую библиотеку и выполняю следующий тест:

if([UIDevice cellularConnected] || [UIDevice networkConnected] || [UIDevice wiFiConnected])
{
    //there is Internet, do what you want
}
0 голосов
/ 22 января 2012

Рекомендуемый Apple способ проверить, подключено ли устройство к сети, - использовать класс Reachability - см. Пример кода здесь: http://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html

0 голосов
/ 22 января 2012

Возможно, вы захотите изменить этот метод на «правильный» способ определения доступности Интернета в IOS с помощью API достижимости.

Посмотрите, например, этот SO-ответ или Пример яблок как это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...