1

クラスXMLReaderを使用して、URLからいくつかのXMLを解析しています。XMLが正常に解析されることもあれば、次のようになることもあります。

Error Domain = NSXMLParserErrorDomain Code = 4 "操作を完了できませんでした。(NSXMLParserErrorDomainエラー4)"

解析は通常、何かを変更した後、最初に実行したときに成功し、その後、何かを変更するまで失敗します。たとえば、以下のコードでは、[parser release]行をコメントアウトしようとしましたが、正常に解析されました。次に、もう一度実行して、エラーコード4に戻りました。

成功または失敗するたびに、同じ入力データをログに記録します。

ここで何が問題になっているのか考えてみてください。それが役立つ場合は、さらにコードを貼り付けることができますが、常に同じデータを受け取るため、エラーをNSXMLParser解析メソッド(以下のコードで呼び出されます)内にあるように分離しました。

ありがとう!

編集:エラーコード4が空のドキュメントエラーであることを知っています。しかし、NSDataが空ではないことはわかっています。だからここで何か他のことが起こっています

    - (NSDictionary *)objectWithData:(NSData *)data
{

//data always makes it here, the same data gets logged regardless of parse success

//NSLog(@"%@",data);

// Clear out any old data
[dictionaryStack release];
[textInProgress release];

dictionaryStack = [[NSMutableArray alloc] init];
textInProgress = [[NSMutableString alloc] init];

// Initialize the stack with a fresh dictionary
[dictionaryStack addObject:[NSMutableDictionary dictionary]];

// Parse the XML
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];

parser.delegate = self;

[parser setShouldResolveExternalEntities:NO];

BOOL success = [parser parse];

[parser release];


// Return the stack's root dictionary on success
if (success)
{
    NSDictionary *resultDict = [dictionaryStack objectAtIndex:0];

    return resultDict;
}

return nil;
}
4

1 に答える 1

0

data問題は、メソッドの最初が正しいかどうかではありませんobjectWithDatadataparse メソッドの計算全体を通して正しいかどうかです。dataパーサーが完了した後、その整合性を確認する必要があります。

おそらくdataXMLReader によって返されますが、適切に保持していません。時折、計算集約型のパーサーがガベージ コレクション (またはプールの再利用) を強制し、data破損することがあります。

メソッド[data retain]の開始時にa を実行するだけです。objectwithDataその後、問題は消えます。

于 2012-06-01T23:41:37.867 に答える