【问题标题】:Serializing threads across segue to tableView跨segue序列化线程到tableView
【发布时间】:2012-04-23 17:27:37
【问题描述】:

我有一个 tableviewcontroller,它的 tableviewcells 直接连接到另一个 tableviewcontroller。 segue 是从 tableViewCell 原型创建到情节提要中的“子”tableview。我在父表视图中使用 prepareForSegue,如下所示。当线程如下时,在主线程中“返回”的代码(因为它与 UI 相关)在执行新子 tableview 的方法(例如 cellForRowAtIndexPath、numberOfRowsInSection、viewDidLoad)之后执行 .结果是子 tableView 没有构建(例如 numberRows=0)。

我通过在新视图的设置器(setPhotoList、setPhotoListTitle)中执行 taleView reloadData 来“修复”这个问题。有没有更好的方法来同步/序列化跨 segue 的主线程?我的修复似乎有点低效,因为子表视图被绘制,但如果两个设置器(在这种情况下)都重新加载,则必须重新加载一次甚至两次。谢谢。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{

UITableViewCell *cell = sender;
UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle: UIActivityIndicatorViewStyleWhiteLarge];

dispatch_queue_t downloadQueue = dispatch_queue_create("flickr downloader", NULL);
dispatch_async(downloadQueue, ^{

    NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];        
    NSDictionary *place = [self.places objectAtIndex:indexPath.row];
    NSArray *photosHere = [FlickrFetcher photosInPlace:place maxResults:MAX_NUM_PHOTOS];
    NSString *placeAll = [place objectForKey:FLICKR_PLACE_NAME];
    NSArray *placeComponents = [placeAll componentsSeparatedByString:@","];

    dispatch_async(dispatch_get_main_queue(), ^{

        if ([segue.identifier isEqualToString:@"Show Photos At Place"]) {
            [segue.destinationViewController setPhotoList:photosHere];
            [segue.destinationViewController setPhotoListTitle:[placeComponents objectAtIndex:0]];
        }         

    });
});
dispatch_release(downloadQueue);

}

【问题讨论】:

    标签: iphone multithreading ipad ios5 segue


    【解决方案1】:

    怎么样...

    1. 在子视图控制器的设置器中,设置一个标志。它指示子视图控制器是否应该重新加载数据。
    2. 在子视图控制器的viewWillAppearviewDidAppear 中,使用downloadQueue 重新加载数据,具体取决于标志。

    【讨论】:

    • t_motooka... 关于您的建议:
    • t_motooka... 谢谢,我认为您的建议消除了我在设置器中创建的双重 reloadData。但不确定这是我要找的,因为我想阻止初始视图加载,直到 prepareForSegue 完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    相关资源
    最近更新 更多