Wie zu warten, bis ein anderer thread zu vervollständigen, bevor Sie fortfahren mit einem segue?

Habe ich zwei UITableViewControllers und ich bin segueing zwischen Ihnen, mithilfe eines Storyboards.

In prepareForSegue:sender: die ersten VC bekommt ein NSArray von einem web-service und setzt das Modell der Ziel-VC mit den heruntergeladenen Daten. Setze ich den Download-Teil in eine dispatch_queue_t es wird also asynchron ausgeführt und nicht blockiert den UI thread. Ich will Tippen Sie auf eine Zelle in der Tabelle, haben die UIActivityIndicatorView drehen beginnen, laden Sie die Fotos, und wenn die Fotos heruntergeladen haben, beenden Sie den spinner und fahren Sie mit der segue.

In der ersten UITableViewController-ich habe eine prepareForSegue:sender: Methode:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"SelectPlace"]) {
        NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];

        UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc]
                                            initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
        [spinner startAnimating];
        self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:spinner];

        __block NSArray *photos = [[NSMutableArray alloc] init];
        dispatch_queue_t downloadQueue = dispatch_queue_create("flickr download", NULL);
        dispatch_async(downloadQueue, ^{
            photos = [FlickrFetcher photosInPlace:[self.places objectAtIndex:indexPath.row] maxResults:50];
        });
        dispatch_release(downloadQueue);
        [spinner stopAnimating];
        [segue.destinationViewController setPhotos:photos withTitle:[[sender textLabel] text]];
    }

}

Recht, jetzt ist es sofort ausführen die segue, ohne sich mit dem spinner oder mit dem warten auf das herunterladen zu beenden.

Wie kann ich asynchron den download der Daten zur Vorbereitung der Ziel-anzeigen, ohne zu blockieren den Haupt-thread, aber auch ohne sofort segueing?

InformationsquelleAutor jjeaton | 2012-10-21
Schreibe einen Kommentar