2012-10-14 10 views
0

Cocoa xml 읽기 쓰기 코딩으로 시작하려면 XML 파일에 쓸 수 있지만 읽을 때 오류가있는 샘플 응용 프로그램을 만들었습니다. 아래는 그 코드입니다.Cocoa에서 xml 파일을 열 때 오류를 제거하는 방법

NSXMLElement * root = [[NSXMLElement alloc ] initWithName:@"Book"] 
NSXMLDocument * xmlDoc = [[NSXMLDocument alloc ] initWithRootElement: root ]; 
[root addChild:[NSXMLElement elementWithName: @"Name" stringValue:@"book name"]]; 
[root addChild:[NSXMLElement elementWithName:@"Author" stringValue:@"bool author"]]; 
NSData * xmlData = [xmlDoc XMLDataWithOptions:NSXMLNodePrettyPrint]; 
[xmlData writeToFile:[@"~/Desktop/book.xml" stringByExpandingTildeInPath ] 
atomically:YES]; 
[xmlDoc release ]; 

제대로 작동하고 book.xml이 만들어집니다. 하지만이 파일을 읽으려고하면이 파일을 여는 데 문제가 있습니다. 여기에 그 코드가 있습니다.

NSString *strValue = [@"~/Desktop/book.xml" stringByExpandingTildeInPath]; 
NSURL * strUrl = [NSURL URLWithString:strValue]; 
NSError * err = nil; 
NSXMLDocument * xmlDoc = [[NSXMLDocument alloc] initWithContentsOfURL:strUrl  
options:NSXMLDocumentTidyXML error:&err]; 
NSXMLNode * rootNode = [xmlDoc rootElement ]; 
[xmlDoc release ]; 

xmlDoc의 값은 nil입니다.

답변을 높이 평가하겠습니다.

감사합니다. Tausif.

+0

'오류'는 무엇이라고 말합니까? – robertvojta

+0

오류가 발생했습니다 - 오류 도메인 = NSURLErrorDomain 코드 = -1014 "0 바이트 리소스". – Tausif

+0

그리고'book.xml' 파일은 실제로 작성된 것입니까? 물결표를 확장 할 때'file : //'을'strValue' 앞에 추가하십시오. – robertvojta

답변

1

strValue에 누락되었습니다. NSURL 클래스 설명서를 참조하십시오 ... 수동으로 file://을 붙이지 않으려면 fileURLWithPath:isDirectory:을 사용해야합니다.

왜이 모든 것입니까?

귀하의 사례에 대한 간단한 설명 - 모든 URL은 구성표/프로토콜 (http, file, https, ...), 구분 기호 (: //) 및 경로 (~/Desktop/...)로 구성됩니다. 필수 사항이 아니라 선택 사항입니다. URLWithString:을 사용하면 문자열이 전체 URL 일뿐 아니라 그 일부가 아니라 예상됩니다 (사례/프로토콜이 없음).

파일 경로 대신 URL을 사용하려는 경우 file:// (URLWithString:을 사용하는 경우)을 처리하거나 파일 경로 만 전달할 수있는 fileURLWithPath:isDirectory:을 사용해야합니다.

경로에 물결 표시 (~)가 포함되어 있으면 우선 확장해야하지만 다른 사람에게는 경고 만합니다.

+0

'NSXMLDocument'의 경우 URL을 사용하지 않으려는 경우 사용할 수있는'initWithData :'메소드가 있습니다 :'[[NSXMLDocument alloc] initWithData : [NSData dataWithContentsOfFile : @ "/ path/to/파일 "] 옵션 : 0 오류 : NULL]' –

+0

그래, 그것을하는 방법에는 여러 가지가 있습니다. – robertvojta

+0

좋아, 지금 나는 이것으로 괜찮아, 아직도 내가 한 번 더 말하려고한다. – Tausif