さて、NSXMLParsing を実行するときにいくつかの問題が発生しています。パーサーは個別に正常に動作していますが、バックグラウンドで非同期に実行しようとすると、ドキュメントの解析が完了したことを示すパーサーは 1 つだけです。
私の完全なプロセスを説明するには、次のようにします
- ユーザーインターフェイスをブロックしないように、バックグラウンドで複数の NSURLConnections と NSURLRequests を使用して 2 つの Web ページを読み込みます
- 次に、そのデータを取得して xml パーサーに渡します。
- Web ページごとに個別の XML パーサーがあり、それぞれに独自の参照とメモリが割り当てられています。
- 次に、通常どおりパーサーを実行します。パーサーは、私が示す特定のタグを探します。yadda yadda、すべて正常に機能しています。
- 問題は、パーサーが終了したことを示すときに発生します。
parserDidEndDocument:(NSXMLParser *)parser
メソッドを使用して、ドキュメントが終了したかどうかを確認します。残念ながら、このメソッドは 1 回しか呼び出されないため、両方のパーサーが完了したかどうかはわかりません。
私のコードはこれです:
接続が完了すると
-(void) connectionDidFinishLoading:(NSURLConnection *)connection {
if (connection == actConnection) {
[self processSynopsis]; // initiate synopsis parser
} else if (connection == castConnection) {
[self processCast]; // initiate cast parser
}
}
シノプシス パーサーの割り当てと開始
-(void) processSynopsis {
actParser = [[NSXMLParser alloc] initWithData:actData];
[actParser setDelegate:self];
[actParser parse];
}
キャスト パーサーの割り当てと開始
-(void) processCast {
castParser = [[NSXMLParser alloc] initWithData:castData];
[castParser setDelegate:self];
[castParser parse];
}
パーサーが終了したかどうかの確認
-(void) parserDidEndDocument:(NSXMLParser *)parser {
if (parser == actParser) {
NSLog(@"ended act %@",parser);
} else if (parser == castParser) {
NSLog(@"ended cast %@",parser);
}
}
このparserDidEndDocument
メソッドは、何らかの理由で 1 回だけ呼び出されます。誰もが何か間違ったことを見たり、以前にこの問題を抱えていたりします. 事前に助けてくれてありがとう!