2014-02-18 3 views
0

привет, я пытаюсь проверить подключение к Интернету в своем приложении. поэтому для этого я уже импортировал файл h достижимости и файл m в проекте. Сейчас я получаю некоторые проблемы. его работа, только если подключение к интернету ее не работает в без подключения к сети ..проверка подключения к Интернету с достижимостью не работает

здесь это код, который использовал ..

-(BOOL)reachable { 
Reachability *reach = [Reachability reachabilityWithHostName:@"https://www.google.co.in/"]; 
NetworkStatus internetStatus = [reach currentReachabilityStatus]; 
if(internetStatus == NotReachable) { 

    UIAlertView *alertOne = [[UIAlertView alloc]initWithTitle:@"Internet" message:@"You dont have internet connection to send message" delegate:self cancelButtonTitle:@"cancel" otherButtonTitles:@"ok", nil]; 
    [alertOne show]; 
    [alertOne release]; 


} 

    return YES; 
} 

я уже использовал этот же код в других проектах его работа их, но здесь его показ предупреждающего сообщения, когда интернет подключен его не показывает, когда его не подключен ...

этот viewdidload код ...

[super viewDidLoad]; 
[self reachable]; 

пожалуйста может любой сказать мне, как решить эту проблему ...

благодаря

+0

Ваше имя хоста является бессмыслицей, а 'reach' в этом коде почти наверняка' nil'. Избавьтесь от 'https', это не URL-адрес, это имя хоста. –

+0

hi @JasonCoco уже устал без https, его не работает, что я пробовал с http, что тоже его не работает .. – kumar

+0

Это потому, что 'reach' -' nil'. Либо потому, что имя хоста не может быть разрешено, либо потому, что вы дали ему вздор, как URL. Проблема в том, что если вы сообщение 'reach', когда оно' nil', вы всегда будете * возвращать '0'. К сожалению, 'NotReachable' также определен как' 0', поэтому вы должны проверить, что 'reach' фактически установлен до того, как вы попытаетесь его использовать. –

ответ

1

Try ниже код

Reachability *reach = [Reachability reachabilityForInternetConnection]; 
//(or) 
Reachability *reach = [Reachability reachabilityWithHostName:@"http://www.google.com"]; 

    NetworkStatus netStatus = [reach currentReachabilityStatus]; 
    if (netStatus != NotReachable) 
    { 
     //Reachable ..Network connection is available 
    } 
    else 
    { 
     //NSLog(@"Network Error No Network Available "); 


     UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"" message:@"Please connect to an Internet connection to Register" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil , nil]; 

     [alertView show]; 

    } 

Он работает для вас ...

+0

привет @Vidhyanand я пробовал ур код также его не работает ... – kumar

+1

Я проверил с выше кодом, заменив строку Достижимость * reach = [Достижимость достижимостиWithHostName: @ "http : //www.google.com "]; Также ..It работает нормально ... для меня .. – Vidhyanand

+0

@ Vidyanand я пытался с этим и его не работает для меня PLS, если у меня нет, я могу ур gmail id или skype id, поэтому я могу объяснить проблему ясно plss – kumar

1

Это не может быть причиной проблемы, но и всегда был неправильно называть reachable в viewDidLoad. Причина в том, что viewDidLoad - это способ слишком рано, чтобы позвонить по коду, который может отображать предупреждение. В viewDidLoad вашего представления еще нет в интерфейсе.

Еще одна особенность заключается в том, что ваш метод reachable обнаруживает доступность и выдает предупреждение. Он возвращает BOOL, но вы отбрасываете его. Вы должны сказать

if (![self reachable]) { // ... 

и расклеивание предупредительного вид там, а не внутри метода reachable.

Еще одна очень странная вещь в том, что ваш метод reachableвсегда возвращает ДА. Это орехи. Вы должны вернуть ДА, если URL-адрес достигнут, и НЕТ, если это не так. В противном случае, какой смысл возвращать BOOL?

+0

Кроме того, на данный момент факт, что вы не используете ARC, является плохим знаком. – matt

+0

hi @matt im using ARC также его не работает – kumar

-1

Пожалуйста, следуйте этим шагам,

1> сделать свойство достижимости и NetworkStatus;
в вашем appDelegate.h

@interface AppDelegate : UIResponder <UIApplicationDelegate,UITabBarControllerDelegate>{ 
    Reachability* reachability; 
    NetworkStatus remoteHostStatus; 

} 
@end 

2> Создать способ оповещения достижимости изменен в applicationDidBecomeActive

- (void)applicationDidBecomeActive:(UIApplication *)application 
{  
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(reachabilityChanged:) 
               name:kReachabilityChangedNotification 
               object:nil]; 
    reachability = [Reachability reachabilityForInternetConnection]; 
    [reachability startNotifier]; 
    remoteHostStatus = [reachability currentReachabilityStatus]; 

    if(remoteHostStatus == NotReachable) { 
     if(DEBUG_MODE){NSLog(@"no");} 

    } 
    else if (remoteHostStatus == ReachableViaWiFi) {if(DEBUG_MODE) 
    {NSLog(@"wifi");} 

    } 
    else if (remoteHostStatus == ReachableViaWWAN) {if(DEBUG_MODE){NSLog(@"cell");} 

    } 

} 

3> объявить reachabilityChanged

-(void)reachabilityChanged:(SCNetworkReachabilityFlags)flags 
{ 

if([self isReachableWithFlags:flags]) 
    { 
     if(self.reachableBlock) 
     { 
      self.reachableBlock(self); 
     } 
    } 
else 
{ 
    if(self.unreachableBlock) 
    { 
     self.unreachableBlock(self); 
    } 
} 

// this makes sure the change notification happens on the MAIN THREAD 
dispatch_async(dispatch_get_main_queue(), ^{ 
    [[NSNotificationCenter defaultCenter] postNotificationName:kReachabilityChangedNotification 
                 object:self]; 
}); 

} 

Спасибо.

Смежные вопросы