- (void)fetchImages {
if (self.profileImages == nil) {
self.profileImages = [[NSMutableDictionary alloc] initWithCapacity:200];
}
dispatch_async(dispatch_get_global_queue(0, 0), ^{
for (id tweet in self.timeline) {
TWRequest *fetchUserImageRequest = [[TWRequest alloc] initWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://api.twitter.com/1/users/profile_image/%@", [tweet valueForKeyPath:@"user.screen_name"]]] parameters:nil requestMethod:TWRequestMethodGET];
[fetchUserImageRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
if ([urlResponse statusCode] == 200) {
[self.profileImages setObject:[UIImage imageWithData:responseData] forKey:[tweet valueForKeyPath:@"user.screen_name"]];
NSArray *indexPath = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:[self.timeline indexOfObject:tweet] inSection:0]];
[self.tableView reloadRowsAtIndexPaths:indexPath withRowAnimation:UITableViewRowAnimationNone];
}
}];
}
});
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"FavoriteCell"];
// configure cell
id tweet = [self.timeline objectAtIndex:[indexPath row]];
UILabel *tweetLabel = (UILabel *)[cell viewWithTag:102];
tweetLabel.text = [tweet objectForKey:@"text"];
UILabel *usernameLabel = (UILabel *)[cell viewWithTag:101];
usernameLabel.text = [tweet valueForKeyPath:@"user.name"];
UIImageView *profileImage = (UIImageView *)[cell viewWithTag:100];
profileImage.image = [self.profileImages objectForKey:[tweet valueForKeyPath:@"user.screen_name"]];
UILabel *dateLabel = (UILabel *)[cell viewWithTag:103];
NSString *labelString = [[tweet objectForKey:@"created_at"] substringToIndex:10];
dateLabel.text = labelString;
return cell;
}
Я получаю временную шкалу, а затем хочу получить изображения профиля для всех пользователей на временной шкале. Мне нужно пройти через твиты и получить изображение. Мне любопытно, как я могу определить, когда все изображения были извлечены, а затем перезагрузить tableview. На данный момент этого не происходит. TWRequest запускается после перезагрузки таблицы. Что я здесь делаю неправильно? Может быть, есть лучший способ сделать это?TWRequest in background
Большое спасибо.
Я обновил метод выше, чтобы отразить то, что он в настоящее время стоит, как, когда я получаю ошибку ниже. – kschins
Отредактировал свой ответ, забудьте о beginUpdates/endUpdates. Думаю, теперь все должно быть решено. – fbernardo
Да, я не знаю. Это также то, что я пробовал, так как я знаю, что обновления пользовательского интерфейса должны обрабатываться основным потоком, но с той же ошибкой. Мне придется исследовать его немного больше по своему усмотрению. Я не уверен, почему обновление табличного представления несовместимо. Этот метод должен быть в порядке. – kschins