1

私が気に入っているのは、データのダウンロードが完了するまで待ってから、開いTableViewて表示することdataです。

私が持っているもの:prepareForSegue呼び出されると、ダウンロードTableViewを待たずにすぐに開きます(正しく実装されていない可能性があります)。datacompletionBlock

注:TableView戻ってもう一度開くと、 data.

- (void)fetchEntries
{
    void (^completionBlock) (NSArray *array, NSError *err) = ^(NSArray *array, NSError *err)
    {
        if (!err)
        {
            self.articlesArray = [NSArray array];
            self.articlesArray = array;
        }
    };

    [[Store sharedStore] fetchArticlesWithCompletion:completionBlock];
}


-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    [self fetchEntries];

    if ([[segue identifier] isEqualToString:@"ShowArticles"])
    {
        TableVC *tbc = segue.destinationViewController;
        tbc.articlesArrayInTableVC = self.articlesArray;
    }

}

Store.m

- (void)fetchArticlesWithCompletion:(void (^) (NSArray *channelObjectFromStore, NSError *errFromStore))blockFromStore
{
    NSString *requestString = [API getLatestArticles];

    NSURL *url = [NSURL URLWithString:requestString];

    NSURLRequest *req = [NSURLRequest requestWithURL:url];

    Connection *connection = [[Connection alloc] initWithRequest:req];

    [connection setCompletionBlockInConnection:blockFromStore];

    [connection start];
}
4

3 に答える 3

2

シークを実行する前に、データをロードする必要があります。

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // show loading indicator
    __weak typeof(self) weakSelf = self;
    [[Store sharedStore] fetchArticlesWithCompletion:^(NSArray *array, NSError *err)
    {
        [weakSelf performSegueWithIdentifier:@"ShowArticles" sender:weakSelf];
        // hide loading indicator
    }];
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // do whatever
}

私の意見では、ユーザーの操作に応じて次のView Controllerをすぐに表示する方がはるかに優れています. 実際に移行する前にデータを待つのではなく、次のView Controllerにデータをロードすることを検討しましたか?

于 2013-01-24T16:59:46.280 に答える
0

ブロックを使用していて、宣言が完了するとすぐに実行されるため、待機することはありません。解決策はブロックを削除することです

- (void)fetchEntries
{
        if (!err)
        {
            self.articlesArray = [NSArray array];
            self.articlesArray = array;
        }


    [[Store sharedStore] fetchArticlesWithCompletion:completionBlock];
}


-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    [self fetchEntries];

    if ([[segue identifier] isEqualToString:@"ShowArticles"])
    {
        TableVC *tbc = segue.destinationViewController;
        tbc.articlesArrayInTableVC = self.articlesArray;
    }

}
于 2013-01-24T16:57:03.583 に答える