2014-02-22 1 views
1

정말 이상한 문제를 와이파이하지 : dataWithContentsOfURL는하지만 무선 랜을 통해, 휴대 전화를 통해 오류 코드 256를 반환하기 시작했다. dataWithContentsOfURL는 휴대 전화를 통해 NSCocoaErrorDomain 코드 = 256 반환하지만 나는 데

작업

을 완료 할 수 없습니다. (코코아 오류 256입니다.)

실제로 셀룰러 데이터 연결이 있고 작동하고있어 셀룰러 연결에 문제가 없습니다. 게다가 코드가 wifi에서 잘 작동하므로 기본 코드이 문제가되지 않습니다. 문제의 코드는 다음과 같습니다.

dispatch_queue_t queue = dispatch_queue_create("com.appName.FetchImage", DISPATCH_QUEUE_SERIAL); 
dispatch_async(queue, ^{ 
        ... 
        NSURL *url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]]; 
        NSLog(@"URL: %@", url); 
        [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 
        NSError *error = [[NSError alloc] init]; 
        NSData *imgData = [NSData dataWithContentsOfURL:url options:NSDataReadingUncached error:&error]; 
        if (error) NSLog(@"Error loading data: %@", error); 
        UIImage *image = [UIImage imageWithData:imgData]; 
        ... 
}); 

의견이 있으십니까? 왜 이런 일이 일어날 지 모른다고 생각합니다. 또한 바닐라 dataWithContentsOfURL (옵션과 반대로)에서도 발생합니다.

+0

시도가에보고 "설정 -> 휴대은 -> 사용 셀룰러 데이터는"당신의 응용 프로그램은 셀룰러 데이터 사용하도록 설정 한 경우. 이것은 최근의 iOS 기능이며 "Celluar disabled for this app"경고가 항상 표시되는 것은 아니므로 사용자에게 혼동을 줄 수 있습니다. 그들은함으로써 당신은이 응용 프로그램에 대한 떨어져 셀룰러 데이터를 설정하면 휴대 아래에있는 응용 프로그램을 사용하는 기초 방법은 오류 256 – viggio24

+0

viggio24 @ 좋은 생각 반환하지만 그게 아니다 - 단지 더블 체크 및 셀룰러 데이터가 실제로 앱 사용 가능 . – w4th

+0

코드가 누락되면 NSError가 발생합니다.당신은 NSError * error = nil;을 원합니다. –

답변

4

NSCocoaErrorDomain Code = 256 수단 :

파일 시스템 또는 파일 이유를 알 수없는 I/O 관련 오류가 발생했습니다.

간단히 말해서, 그것은 을 의미하지 않는다..

그러나 일반적으로 NSDatadataWithContentsOfURL은 로컬 파일 리소스에 액세스 할 때만 사용해야합니다.

중요 :이 동기화 방법을 사용하여 네트워크 기반 URL을 요청하지 마십시오. 네트워크 기반 URL의 경우,이 메소드는 가난한 사용자 경험의 결과로, 느린 네트워크에서 수십 초에 대한 현재의 thread 을 차단할 수 있으며, 아이폰 OS에서 앱이 종료 될 수 있습니다.

코드를 개선하고 더 나은 데이터 다운로드 방법을 사용할 수 있습니다. 발생한 문제가 해결 될 수 있습니다. 을 바탕으로

+ (void)sendAsynchronousRequest:(NSURLRequest *)request 
          queue:(NSOperationQueue *)queue 
       completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*))handler; 

: 대신 dataWithContentsOfURL를 사용하여, 당신은 같은 NSURLConnection의 수업 방법을 사용할 수 있습니다 내 경우

Using NSURLConnection

NSData Class Reference

+0

이것은 어떤 이유로 든 NSURLConnection이 작동합니다. 백그라운드 스레드에서 dataWithContentsOfURL이로드되는 동안 이미지를로드하는 것이 내가 찾은 많은 리소스로 권장됩니다. 고맙습니다. – w4th

+0

문제가없는 친구 :) – RaffAl

1

, 문제는 잘못된 네트워크 연결했다 내 모바일 4G에서. 그것은 xcode에 특화된 것이 아니었고, 일반 사파리 브라우징에도 존재했습니다. 다른 네트워크로 전환했는데 문제가 해결되었습니다. "힌트"는 메서드가 즉시 반환되지 않았다는 것입니다. 약 1 분 후에 시간이 초과되었습니다.