2012-08-09 1 views
0

를로드 할 때이 있습니다아이폰 OS 내 애플 대리자에서 외부 데이터

Reachability* reach = [Reachability reachabilityWithHostname:@"www.google.com"]; 

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(reachabilityChanged:) 
              name:kReachabilityChangedNotification 
              object:nil]; 

[reach startNotifier]; 

HomeViewController_iPhone *homeViewController = [[HomeViewController_iPhone alloc] initWithNibName:@"HomeViewController_iPhone" bundle:nil]; 
homeViewController.managedObjectContext = self.managedObjectContext; 
UINavigationController *homeNavController = [[UINavigationController alloc] initWithRootViewController: homeViewController]; 
homeNavController.navigationBar.barStyle = UIBarStyleBlackTranslucent; 

self.tabBarController.viewControllers = [NSArray arrayWithObjects:homeNavController, nil]; 

... 

-(void)reachabilityChanged:(NSNotification*)note 
{ 
Reachability * reach = [note object]; 

if([reach isReachable]) 
{ 
    NSLog(@"Notification Says Reachable"); 
    self.isConnected = YES; 
} 
else 
{ 
    NSLog(@"Notification Says UN-Reachable"); 
    self.isConnected = NO; 
} 
} 

문제는 내 HomeViewController (있는 viewDidLoad)에서 나는이 할 것을 :

AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; 

if (appDelegate.isConnected) 
{ 
    dispatch_async(kBgQueue, ^{ 
     NSData* data = [NSData dataWithContentsOfURL: kFeedURL]; 
     [self performSelectorOnMainThread:@selector(fetchedData:) 
           withObject:data waitUntilDone:YES]; 
    }); 
} 

그러나 appDelegate.isConnected을 내가 연결되어 있어도 항상 NO입니다. Reachability 클래스가 연결이 설정되기 전에 검사가 수행되고 있다고 생각합니다. 그러나 어디에서 데이터를 가져 오기위한 호출을해야합니까? viewDidLoad 및 viewWillAppear 시도했지만 isConnected 여전히 해당 지점에서 모두 NO입니다.

+0

(appDelegate.isConnected) 문 있다면이를 사용하지 않는 경우는 작품을 가져,하지만 사용자가 연결 dispatch_async 호출이 응용 프로그램을 충돌합니다이없는 경우 때문에 나는 그 확인을 할 필요가 . – soleil

+0

아마도이 답변은 도움이 될 것입니다 -> http://stackoverflow.com/questions/5195012/how-to-use-reachability-class-to-detect-valid-internet-connection?rq=1 – dnstevenson

답변

0

dnstevenson이 제안한 답변에서와 같이 뷰 컨트롤러를 만들기 전에 앱 위임에서이 문제를 해결했습니다. 또한

Reachability *reachability = [Reachability reachabilityForInternetConnection];  
NetworkStatus internetStatus = [reachability currentReachabilityStatus]; 
if (internetStatus != NotReachable) { 
    //my web-dependent code 
} 
else { 
    //there-is-no-connection warning 
}