0

NSXML パーサーを使用して解析され、解析結果を含む新しいビューにプッシュされる xml リンクのリストを持つテーブルビューがあります。しかし、それは非常に奇妙な動作をしています。解析操作は、ユーザーがセルを選択したときに発生し、NSXML デリゲート メソッド didEndDocument を使用して、tableview を持つオブジェクトに、先に進み、解析の結果によって設定された新しいビュー コントローラーをプッシュするように通知します。新しいビューにプッシュする前に、結果を含む配列をチェックして、空でないことを確認します。そうであれば、新しいビューをプッシュせずにアラート ビューを表示するだけです。入力された配列を返すことがわかっているセルを選択すると、配列が空であると見なされ、ビューがプッシュされません。しかし、もう一度セルを選択すると、新しいビューにプッシュされ、適切なデータが表示されます。didEndDocumentデリゲートメソッドが時期尚早に呼び出されていない限り、解析操作が完了する前に時期尚早に新しいView Controllerにプッシュすることはありません。どんな助けでも大歓迎です。

コード:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];

    activity = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    activity.center = selectedCell.accessoryView.center;

    selectedCell.accessoryType = UITableViewCellAccessoryNone;
    selectedCell.accessoryView = activity;

    [activity startAnimating];

    departmentName = [[sortedArray objectAtIndex:indexPath.row] objectForKey:@"name"];

    [self performSelector:@selector(parse:) withObject:[[sortedArray objectAtIndex:indexPath.row] objectForKey:@"link"] afterDelay:0];

    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

- (void)parse:(NSString *)link {

    NSLog(@"Link = %@", link);

    kxmlParser = [[KMXMLParser alloc] loadXMLByURL:link delegate:self];
}

- (void)parserDidStartDocument:(NSXMLParser *)parser {

    NSLog(@"Did Start");
}

- (void)parserDidEndDocument:(NSXMLParser *)parser {

    NSLog(@"Did End");

    NSLog(@"Array = %@", kxmlParser.posts);

    [activity stopAnimating];

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle: nil];
    MainViewController *main = [storyboard instantiateViewControllerWithIdentifier:@"main"];
    [main setDepartmentname:departmentName];

    [self.navigationController pushViewController:main animated:YES];
}
4

0 に答える 0