0

Cocoa xml 読み取り書き込みコーディングを開始するために、サンプル アプリケーションを作成しました。このアプリケーションでは、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 です。

あなたの答えは高く評価されます。

ありがとう、タウシフ。

4

1 に答える 1

1

に行方不明file://ですstrValue。クラスのドキュメントを参照してください...手動でNSURL先頭に追加したくない場合は、を使用する必要があります。file://fileURLWithPath:isDirectory:

なぜこれが?

ケースの簡単な説明 - すべての URL は、スキーム/プロトコル (http、ファイル、https、...)、区切り文字 (://)、およびパス (~/Desktop/...) で構成されます。また、オプションではなく必須です。使用するときURLWithString:は、文字列がその一部ではなく完全な URL であることが期待されます (この場合、スキーム/プロトコルがありません)。

そのため、ファイル パスの代わりに URL を使用するfile://場合は、(使用する場合URLWithString:) に注意するか、ファイル パスのみを渡すことができる場所を使用fileURLWithPath:isDirectory:する必要があります。

これを行いますが、パスにチルダ (~) が含まれている場合は、最初に展開する必要があることを他の人に警告するだけです。

于 2012-10-14T10:51:30.227 に答える