didSelectRowAtIndexPath用于调用新线程

时间:2012-03-02 07:49:36

标签: xcode multithreading selector didselectrowatindexpath

我为didSelectRowAtIndexPath编写了这段代码,但我想优化代码以创建一个新的线程,从JSON解析器中推送视图控制器。

    #pragma mark - DidselectRow

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

    //SPINNER
    [spinner startAnimating];


    //[self performSelector:@selector(pushDetailView:) withObject:tableView afterDelay:0.1];

    /*
    int *riga = indexPath.row;
    [NSThread detachNewThreadSelector:@selector(pushDetailView) toTarget:self withObject:riga];
    */

    NSLog(@"Seleziono l'immagine: %@", [photoTitles objectAtIndex:indexPath.row]);

    //creo un'istanza di DettaglioView
    DettaglioView *dettaglioImmagine = [[DettaglioView alloc] initWithNibName:@"DettaglioView" bundle:nil];



    //Inseirsco il titolo nella Navigation BAR della vista
    dettaglioImmagine.titoloSource = [photoTitles objectAtIndex:indexPath.row];

    dettaglioImmagine.imageCoverSource = [photoURLsLargeImage objectAtIndex:indexPath.row];
    NSLog(@"imageCoverSource: %@",  dettaglioImmagine.imageCoverSource);


    //passo alla vista del DettaglioView con l'animazione usando il pushViewController
    [self.navigationController pushViewController:dettaglioImmagine animated:YES];


    //pulisco lo style della cella selezionata togliendo il fondino blu
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    //Attivo la vibrazione
    [self buzz];
}

现在我希望从didSelectRowAtIndexPath创建一个外部方法来推送详细视图,如下所示:

- (void)pushDetailView:(NSInteger *)idRow {

    // Push the detail view here
}

现在我的问题是,如何传递indexPath。用于pushDetailView的行方法?

我试过这个,但它不起作用

int *riga = indexPath.row;
[NSThread detachNewThreadSelector:@selector(pushDetailView) toTarget:self withObject:riga];

2 个答案:

答案 0 :(得分:0)

任何用户界面任务绝对必须在主线程上运行。这不是一个选项,后台UI操作可以并将引发异常。在主线程上推送新的viewController之前,必须在后台加载数据。

答案 1 :(得分:0)

你不能通过int。而是int - >可以保留的nsnumber或nsstring