我在一个包含自定义单元格的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/