2013-04-10 5 views
-1

나는 전화가인코딩을 NSData는 URL의 문서 디렉토리

내 문제가 오프라인 상태 인 경우 내가 페이지를로드 할 수 있습니다 아이폰의 문서 디렉토리에 로컬 HTML 페이지를 저장하기 위해 노력하고있어에 저장하지 NSData 객체를 직접 파일에 쓰도록 호출하면 모든 원시 데이터가 문서 디렉토리의 파일에 저장됩니다.

하지만 인코딩을 사용하여 NSString에 NSData를 캐스트하면 파일을 문서 디렉토리에 쓰지 않습니다. 그러나 내 내용 개체를 인쇄 할 때 올바른 데이터를 로그 아웃합니다. 난 그걸 파일에 저장하기를 원해.

NSURL *url = [NSURL URLWithString:@"http://anyurl"]; 
NSData *urlHtmlData = [NSData dataWithContentsOfURL:url];  

NSString *myString = [[NSString alloc]initWithData:urlHtmlData encoding:NSUTF8StringEncoding]; 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *fileName = [documentsDirectory stringByAppendingPathComponent:@"index.html"]; 
[myString writeToFile:fileName atomically:NO encoding:NSStringEncodingConversionAllowLossy error:nil]; 

콘텐츠의 파일 쓰기가 중단 될 수있는 원인은 무엇입니까?

또는 anyones가 문서 디렉토리에 저장하지 않고 오프라인 웹 페이지를 보는 더 좋은 해결책을 가지고 있다면?

감사합니다.

+0

"내용"을 버려서 모든 데이터가 포함되어 있는지 확인 했습니까? –

+3

그리고 이것은 쓸모가 없습니다 :''[NSString alloc] initWithFormat : @ "% @", myString];' –

+0

(그리고'error : nil'은 많은 병을 숨길 수 있습니다.) –

답변

1

몇 가지 문제가있을 수 있습니다. 하나 : stringWithFormat:을 사용하여 경로 구성 요소를 추가하지 마십시오.

NSString *fileName = [documentsDirectory stringByAppendingPathComponent:@"index.html"]; 

2 : :있는 NSString은 그 방법을 가지고 NSStringEncodingConversionAllowLossy 그것을 사용하여, 당신은 실제로 그것을 실현하지 않고 NSASCIIStringEncoding를 지정하고, 그래서 writeToFile:에 대해 정의되지 않은 열거의 일부입니다. 제 생각에는 대신 NSUTF8StringEncoding을 사용하십시오.

또한 NSString *content = [[NSString alloc]initWithFormat:@"%@", myString];은 중복 myString을 제외하고는 아무 것도하지 않습니다. 그 줄을 지우고 그냥 사용하십시오 [myString writeToFile:....