ボタンをクリックすると、TBXML パーサーを使用して XML ファイルからコンテンツを取得するビューがあります。クリックされたボタン メソッドでは次のようになります。
// Should be [activityIndicator startAnimating];
NSURL *url = [NSURL URLWithString:@"adress.xml"];
NSData *data = [NSData dataWithContentsOfURL:url];
TBXML *tbxml = [TBXML newTBXMLWithXMLData:data error:nil];
listArray = [NSMutableArray arrayWithObjects:nil];
[self getData:tbxml.rootXMLElement];
// Should be [activityIndicator stopAnimating];
しかし、 activityIndicator は表示されません...ビューの最初に追加すると表示されるので、実装の問題ではありません...だから私は立ち往生しています。何かアドバイス ?
どうもありがとう
編集:ここにコードがあります:
ボタンをクリックすると呼び出される私の関数:
NSURL *url = [NSURL URLWithString:@"adress.xml"];
dispatch_queue_t queue = dispatch_get_global_queue(
DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
NSData *data = [NSData dataWithContentsOfURL:url];
dispatch_async(dispatch_get_main_queue(), ^(void) {
TBXML *tbxml = [TBXML newTBXMLWithXMLData:data error:nil];
listArray = [NSMutableArray arrayWithObjects:nil];
[self getData:tbxml.rootXMLElement];
[activityIndicator stopAnimating];
});
});
私の getData 関数:
- (void) getData : (TBXMLElement *) element
{
Offre *offre = [[Offre alloc] init];
do {
if(!go) if([[TBXML elementName:element] isEqualToString:@"item"]) go = YES;
if(go)
{
if([[TBXML elementName:element] isEqualToString:@"title"]) [offre set_title:[TBXML textForElement:element]];
if([[TBXML elementName:element] isEqualToString:@"description"]) [offre set_description:[TBXML textForElement:element]];
if([[TBXML elementName:element] isEqualToString:@"pubDate"]) [offre set_pubDate:[TBXML textForElement:element]];
if([[TBXML elementName:element] isEqualToString:@"link"]) [offre set_link:[TBXML textForElement:element]];
if([[TBXML elementName:element] isEqualToString:@"contract-type"]) [offre set_contractType:[TBXML textForElement:element]];
if([[TBXML elementName:element] isEqualToString:@"salary"]) [offre set_salary:[TBXML textForElement:element]];
if([[TBXML elementName:element] isEqualToString:@"fn-org"]) [offre set_fnOrg:[TBXML textForElement:element]];
if([[TBXML elementName:element] isEqualToString:@"locality"]) [offre set_locality:[TBXML textForElement:element]];
if([[TBXML elementName:element] isEqualToString:@"state"]) [offre set_state:[TBXML textForElement:element]];
if([[TBXML elementName:element] isEqualToString:@"filiere"]) [offre set_filiere:[TBXML textForElement:element]];
if([[TBXML elementName:element] isEqualToString:@"categorie"]) [offre set_categorie:[TBXML textForElement:element]];
if([[TBXML elementName:element] isEqualToString:@"statut"]) [offre set_statut:[TBXML textForElement:element]];
if([[TBXML elementName:element] isEqualToString:@"country-name"]) [offre set_countryName:[TBXML textForElement:element]];
if([[TBXML elementName:element] isEqualToString:@"tag"]) [offre set_tag:[TBXML textForElement:element]];
if([[TBXML elementName:element] isEqualToString:@"familleMetiers"])
{
[offre set_familleMetier:[TBXML textForElement:element]];
[listArray addObject:offre];
offre = nil;
}
}
if (element->firstChild) [self getData:element->firstChild];
} while ((element = element->nextSibling));
}
これは関数の再帰性によるものではないのだろうか。