NSXMLParserを使用して、次のようなXMLファイルを解析しようとしています。
<?xml version="1.0" encoding="us-ascii"?>
<teams>
<team id = "A1">
<player1>John</player1>
<player2>José</player2>
</team>
...
</teams>
私は次のコードを使用します:
NSString *urlString = [NSString stringWithFormat:@"http://www....abc.php?category=%@&poule=%c", @"S", 'B']; // Obviously, this contains an actual web address
NSURL *url = [NSURL URLWithString:urlString];
NSData *xml = [[NSData alloc] initWithContentsOfURL:url]; // <==
NSXMLParser *xmlParserObject = [[NSXMLParser alloc]initWithData:xml];
[xmlParserObject setDelegate:self];
[xmlParserObject parse];
そして、didStartElement、foundCharacters、didEndElement、およびparserErrorOccurredデリゲート関数を実装しました。
これはすべて、éなどの「特殊」文字に遭遇するまでうまくいきます。デリゲートメソッドparserErrorOccurredは、次のエラーを報告します。
parser error: Error Domain=NSXMLParserErrorDomain Code=1544 "The operation couldn’t be completed. (NSXMLParserErrorDomain error 1544.)"
parser error: Error Domain=NSXMLParserErrorDomain Code=5 "The operation couldn’t be completed. (NSXMLParserErrorDomain error 5.)"
次に、「<==」でマークされた部分を次のように置き換えました。
NSError *error;
NSData *xml = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
if (xml == nil) {
NSLog(@"*** Fatal error: %@\nuserInfo:%@", error, [error userInfo]);
}
上記のエラーに加えて、次のエラーが発生しました。
*** Fatal error: Error Domain=NSCocoaErrorDomain Code=261 "The operation couldn’t be completed. (Cocoa error 261.)" UserInfo=0x8158d90 {NSURL=http://www....abc.php?category=S&poule=B, NSStringEncoding=4}
userInfo:{
NSStringEncoding = 4;
NSURL = "http://www....abc.php?category=S&poule=B";
}
また、NSUTF8StringEncodingを、NSISOLatin1StringEncoding、NSUTF16StringEncoding、NSASCIIStringEncoding、NSUnicodeStringEncodingなどの他のエンコーダーに置き換えてみました。これにより、次のエラーが発生しました。
-[__NSCFString bytes]: unrecognized selector sent to instance 0x6e4cbc0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString bytes]: unrecognized selector sent to instance 0x6e4cbc0'
*** First throw call stack:
(0x12d0022 0x1781cd6 0x12d1cbd 0x1236ed0 0x1236cb2 0xce5f51 0xb447 0xaa89 0x1f2e330 0x1f2f439 0x908b9b24 0x908bb6fe)
terminate called throwing an exception(lldb)
XMLの内容を制御することはできませんが、実際に誤った情報が含まれている場合は、Webマスターに相談することができます。
é文字を「e」または「?」として表示しても問題ありません。それが必要な場合。
このエラーの原因と、エラーを修正またはバイパスする方法についてのアドバイスをいただければ幸いです。
Tx!
--GB