2012-05-18 88 views
0

我开发了一个使用网络连接进行在线流式传输的无线电应用程序,同时我也检查网络是否可用。如果没有网络连接,它显示一个警告“他们没有可用的网络”。我的代码是在这里iPhone应用程序在WiFi连接超出范围时冻结?

- (void)viewDidLoad 
    { 
    [super viewDidLoad]; 


    //checking network reachability statys, this will show one alert view if no network available 
    Reachability* reachabile = [Reachability reachabilityWithHostName:@"www.apple.com"]; 
    NetworkStatus remoteHostStatus = [reachabile currentReachabilityStatus]; 

    if(remoteHostStatus == NotReachable) 
    { 

    NSLog(@"not reachable"); 
     UIAlertView *notReachableAlert1=[[UIAlertView alloc]initWithTitle:@"NO INTERNET CONNECTION" message:@"This Application Need Internet To Run" delegate:self cancelButtonTitle:@"Okay Buddy" otherButtonTitles:nil]; 
    notReachableAlert1.delegate=self; 
    [notReachableAlert1 show]; 
    [notReachableAlert1 release]; 


    } 




    [[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(moviePlayerPlaybackStateDidChange:) 
              name:MPMoviePlayerPlaybackStateDidChangeNotification 
              object:nil]; 




    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerLoadStateChanged:) name:MPMoviePlayerLoadStateDidChangeNotification object:player]; 



    // Do any additional setup after loading the view from its nib. 
    } 

还我检查通知的情况

-(void) moviePlayerPlaybackStateDidChange:(NSNotification*)notification 
    { 
    Reachability* reachabile = [Reachability reachabilityWithHostName:@"www.apple.com"]; 
    NetworkStatus remoteHostStatus = [reachabile currentReachabilityStatus]; 

    NSLog(@"playbackDidChanged"); 

    MPMoviePlayerController *moviePlayer = notification.object; 
    player=notification.object; 
    MPMoviePlaybackState playbackState = moviePlayer.playbackState; 
    if(playbackState == MPMoviePlaybackStateStopped) 
    { 
     NSLog(@"MPMoviePlaybackStateStopped"); 


    } 
    else if(playbackState == MPMoviePlaybackStatePlaying) { 
    NSLog(@"MPMoviePlaybackStatePlaying"); 


} else if(playbackState == MPMoviePlaybackStatePaused) { 
    NSLog(@"MPMoviePlaybackStatePaused"); 

    if(remoteHostStatus == NotReachable) 
    { 

      NSLog(@"not reachable"); 
      UIAlertView *notReachableAlert1=[[UIAlertView alloc]initWithTitle:@"NO INTERNET CONNECTION" message:@"This Application Need Internet To Run" delegate:self cancelButtonTitle:@"Okay Buddy" otherButtonTitles:nil]; 
     notReachableAlert1.delegate=self; 
     [notReachableAlert1 show]; 
     [notReachableAlert1 release]; 


     } 
} else if(playbackState == MPMoviePlaybackStateInterrupted) 
    { 
    NSLog(@"MPMoviePlaybackStateInterrupted"); 

    if((remoteHostStatus == NotReachable)&&(remoteHostStatus != ReachableViaWiFi)) 
    { 

      NSLog(@"not reachable"); 
      UIAlertView *notReachableAlert1=[[UIAlertView alloc]initWithTitle:@"NO INTERNET CONNECTION" message:@"This Application Need Internet To Run" delegate:self cancelButtonTitle:@"Okay Buddy" otherButtonTitles:nil]; 
     notReachableAlert1.delegate=self; 
     [notReachableAlert1 show]; 
     [notReachableAlert1 release]; 


    } 

我的问题是,应用程序会熄灭范围从WiFi连接没有没有3G和正常的数据连接,它冻结了一段时间。当我回到范围时,它会进入活动状态并显示警报。

是他们在网络可用性检查方面做错了什么?

回答

1

这是样品U可以编辑根据乌拉圭回合的应用

@class Reachability; 

@interface urAppDelegate : NSObject <UIApplicationDelegate> 
{ 

     Reachability* internetReachable; 

     Reachability* hostReachable; 

     BOOL hostActive; 

     BOOL internetActive; 

} 

@property (nonatomic, assign) BOOL hostActive; 

@property (nonatomic, assign) BOOL internetActive; 
@end 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ 

    self.internetActive=NO; 
    self.hostActive=NO; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil]; 

    internetReachable = [[Reachability reachabilityForInternetConnection] retain]; 
    [internetReachable startNotifier]; 

    // check if a pathway to a random host exists 
    hostReachable = [[Reachability reachabilityWithHostName: @"www.apple.com"] retain]; 
    [hostReachable startNotifier]; 

    // now patiently wait for the notification 

[self.window makeKeyAndVisible]; 
    return YES; 
} 

-(void) checkNetworkStatus:(NSNotification *)notice{ 
    NetworkStatus internetStatus = [internetReachable currentReachabilityStatus]; 

    switch (internetStatus) 
    { 
     case NotReachable: 
     { 
      NSLog(@"The internet is down."); 
      self.internetActive = NO;    
      break; 
     } 
     case ReachableViaWiFi: 
     { 
      NSLog(@"The internet is working via WIFI."); 
      self.internetActive = YES; 

      break; 
     } 
     case ReachableViaWWAN: 
     { 
      NSLog(@"The internet is working via WWAN."); 
      self.internetActive = YES;    
      break; 
     } 
    } 

    NetworkStatus hostStatus = [hostReachable currentReachabilityStatus]; 
    switch (hostStatus) 
    { 
     case NotReachable: 
     { 
      NSLog(@"A gateway to the host server is down."); 
      self.hostActive = NO;    
      break; 
     } 
     case ReachableViaWiFi: 
     { 
      NSLog(@"A gateway to the host server is working via WIFI."); 
      self.hostActive = YES; 

      break; 
     } 
     case ReachableViaWWAN: 
     { 
      NSLog(@"A gateway to the host server is working via WWAN."); 
      self.hostActive = YES; 
      break; 
     } 
    } 


    if (internetActive && hostActive) 
    {  
     // Net work Available....... 

    } 
    else 
    { 
     UIAlertView *netWorkAlert=[[UIAlertView alloc]initWithTitle:@"Network Connection Error" message:@"Please Check Connection" delegate:nil cancelButtonTitle:@"Close" otherButtonTitles:nil, nil]; 
     [netWorkAlert show]; 
     [netWorkAlert release]; 
    } 

} 
+0

好吗谢谢你们的反馈,你可以请注明哪些对象是这些internetReachable,hostReachable。 ?这些是可达性类的对象? –

+0

internetreachable和hostReachable都是Reachability类的实例 – Musthafa

+0

非常感谢,现在它工作的很棒... –