我在一个包含自定义单元格的ViewController中有一个UITableView。
首次加载视图时,以下代码中的indexPathForCell会毫无问题地返回indexPath:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    PostCell *postCell = (PostCell *)[tableView dequeueReusableCellWithIdentifier:@"PostCell"];

    if (postCell == nil) {
        NSLog(@"EmptyCell Found");
    }

    NSDictionary *object = [postArray objectAtIndex:indexPath.row];
    NSString *imageURL = [object objectForKey:@"imageURL"];

    NSIndexPath *originalIndexPath = indexPath;
    NSLog(@"Original IndexPath %@", originalIndexPath);

    SDWebImageManager *manager = [SDWebImageManager sharedManager];
        [manager downloadWithURL:[NSURL URLWithString:imageURL]
                         options:indexPath.row == 0 ? SDWebImageRefreshCached : 0
                        progress:^(NSInteger receivedSize, NSInteger expectedSize){}
                       completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished){
                           if (image) {

                               // This returns correctly on first load
                               NSIndexPath *currentIndexPath = [imageTableView indexPathForCell:postCell];
                               NSLog(@"Current IndexPath %@", currentIndexPath);
                           }
                       }
        ];
}


刷新tableView后,currentIndexPath始终为(null)。
以下是我的刷新代码:

- (void)refreshMainView {
    AFHTTPRequestOperation *downloadPostOperation = [[AFHTTPRequestOperation alloc] initWithRequest:serviceRequest];

    [downloadPostOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
        //[tableView beginUpdates];

        NSDictionary *json = [NSJSONSerialization JSONObjectWithData:urlData options:kNilOptions error:&error];
        NSMutableArray *newPostArray = [json objectForKey:@"posts"];

        // Replacing the old array with new array
        postArray = newPostArray;
        [self stopRefresh];
        //[tableView endUpdates]
        [imageTableView reloadData];
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        [self stopRefresh];
    }];


如果仅执行[tableView reloadData]而未执行refreshMainView,则获取currentIndexPath不会有任何问题。

我必须忽略某些东西,有人可以帮我吗?谢谢!

编辑:
我改用[postCell.postImageView setImageWithURL:[NSURL URLWithString:imageURL] placeholderImage:nil];进行刷新,所以我怀疑将indexPath放在完成的块中对我来说有点问题,有人可以帮忙吗?我在执行一些图像处理时需要完整的块。

最佳答案

嗨,我终于解决了它。

对于需要答案的人,只需添加

dispatch_async(dispatch_get_main_queue(), ^{
});

在检索indexPathForCell的部分周围。

关于ios - 重新加载UITableView数据后,indexPathForCell返回null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22524980/

10-13 03:57