2009-04-12 5 views
1

나는 그래서 아이폰 애플 리케이션에있는 NSURLConnection을 사용하고 있습니다 :iPhone에서 인터넷 사용 가능 여부 확인?

NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest: request delegate: self]; 

요청이 설치되어 제대로 작동하지만, 내가 거기 외설 경우 사용자에게 "사용할 수없는 연결"메시지를를 제공 할 수 있도록하려는있다 사용할 수있는 연결이 없습니다. iPhone에서 인터넷 연결을 사용할 수 있는지 여부를 확인하는 빠른 방법이 있습니까? 사전에

if (conn) { // do normal processing } else { // display connection not available message } 

감사합니다, 벤이 나를 위해 작동하고 사과 지진 XML 프로젝트에서 가져

답변

1

Raj, 그 코드는 작동하지만 항상 원하는 결과를 생성하지는 않습니다.

iPhone 스택의 TCP 스택이 예상되는 것과 매우 다릅니다. "도달 가능성"코드를 사용하면 네트워크 연결이 존재하지만 안정적으로 감지되지 않을 수도 있습니다. 그러나 MobileSafari를 시작하면 "도달 가능성"코드 (Raj의 코드)로 연결을 확인하려는 시도가 올바른 결과를 가져옵니다.

네트워크 연결을 결정하는 데 가장 효과적인 방법은 응용 프로그램이로드 될 때 별도의 스레드에서 NSURLConnection 검사를 실행하는 것입니다. "예"(예 : 서버 또는 기타 HTML 파일)를 반환하는 URL로 전화를 겁니다. 그런 다음 반환 된 결과가 정적 텍스트와 동일한 지 확인하십시오. 그렇게하면 일관되게 작동하지 않는 "도달 가능성"코드와 달리 NSURLConnection 스택이 제대로 도달하고 있음을 알 수 있습니다.

+0

@jasonb -이 접근법의 유일한 문제점은이 검사를 수행하는 데 걸리는 시간입니다. 사용자가 인터넷 검색을 위해 몇 초 기다리기를 원하지 않습니다. 나는 이전에 같은 스타일로 해왔지만, 코드를 바꿨다. 애플이 애플이 인터넷을 감지하는 데 영원히 걸린다면 앱을 거부한다고 들었다. – Raj

+0

@Raj - 인터넷 액세스가 필요하지 않다면 다른 NSThread로 프로세스를 보낼 수있다. 응용 프로그램이 시작됩니다. – Jason

5

:

을있는 NSURLConnection을 INITING 후 다음 사항을 추가하는 것만 큼 간단

겠습니까 뭔가

- (BOOL)isDataSourceAvailable 
{ 
    static BOOL checkNetwork = YES; 
    if (checkNetwork) { // Since checking the reachability of a host can be expensive, cache the result and perform the reachability check once. 
     checkNetwork = NO; 

     Boolean success;  
     const char *host_name = "twitter.com"; // your data source host name 

     SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, host_name); 
     SCNetworkReachabilityFlags flags; 
     success = SCNetworkReachabilityGetFlags(reachability, &flags); 
     _isDataSourceAvailable = success && (flags & kSCNetworkFlagsReachable) && !(flags & kSCNetworkFlagsConnectionRequired); 
     CFRelease(reachability); 
    } 
    return _isDataSourceAvailable; 
} 
관련 문제