Пользовательский UITableView не обновляет ячейки - PullRequest
1 голос
/ 14 июня 2011

Я создаю пользовательский UITableViewCells.Я использую файл NIB в качестве ячейки.Это отображение некоторых данных из REST API.Проблема, с которой я сталкиваюсь, заключается в том, что когда я прокручиваю вниз, а затем снова поднимаюсь вверх, ячейки не обновляются.Он показывает данные, когда я прокручивал вниз.Вот мой код -

MyViewController.h

@interface FLOViewController : UIViewController <UISearchBarDelegate, 
UITableViewDelegate, 
UITableViewDataSource>
{
    UISearchBar *sBar;
    UITableView *searchResTable;
    NSArray *searchRes;
    UITableViewCell *resultsOne;
}

@property (nonatomic, retain) IBOutlet UILabel *photos;
@property(nonatomic, retain) IBOutlet UITableView *searchResTable;
@property (nonatomic, retain) NSArray *searchRes;

/* Search Results Templates */
@property (nonatomic, assign) IBOutlet UITableViewCell *resultsOne;

MyViewController.m

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(self.searchRes == nil)
        return nil;

    static NSString *cId  = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cId];
    if(cell == nil)
    {
        NSLog(@"CREATING NEW CELL");
        [[NSBundle mainBundle] loadNibNamed:@"ResultsOne" owner:self options:nil];
        cell            = self.resultsOne;
        self.resultsOne = nil;
    }
    cell.selectionStyle = UITableViewCellSelectionStyleNone;

    //from here on displaying images etc from REST API.
    UIImageView *uPhoto = (UIImageView *)[cell viewWithTag:2];
NSString *photoURL  = [[self.searchRes objectAtIndex:[indexPath row]] objectForKey:@"originator_photo_url"];
if(photoURL)
{
    [UIView beginAnimations:@"fadeIn" context:NULL];
    [UIView setAnimationDuration:0.5];

    NSString *urlString = [NSString stringWithString:photoURL];
    [uPhoto setImageWithURL:[NSURL URLWithString:urlString] 
           placeholderImage:[UIImage imageNamed:[NSString stringWithFormat:@"ph%d.png",[indexPath row]]]];

    [UIView commitAnimations];
}

    //similarly display other sections in the cell...

Почему содержимое моей ячейки не обновляется?Даже когда я добавляю совершенно новые данные (через поиск по API REST), некоторые ячейки все еще показывают старые представления в ячейках таблицы.

ОБНОВЛЕНИЕ : Если я закомментирую UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cId];,Проблема решена.то есть я не вижу повторения содержимого ячейки при прокрутке.

Поскольку я создаю пользовательский ImageViews в UITableViewCell, нужно ли мне делать что-то особенное, чтобы очистить содержимое ячейки перед добавлением нового содержимого ??

Ответы [ 2 ]

2 голосов
/ 26 июля 2011

Мне кажется, что вы забыли сбросить uPhoto-UIImageView, если photoURL равен нулю. Это приводит к кешированию данных.

if (photoURL) {
   ...
}
else {
  uPhoto.image = nil;
}
0 голосов
/ 11 сентября 2013

Вы используете

static NSString *cId  = @"Cell";

Давайте попробуем разные идентификаторы для каждой ячейки. Я сталкиваюсь с этой проблемой и решаю ее, используя другой идентификатор ячейки, такой как

static NSString *cId  =[NSString StringWithFormat : @"Cell_%d_%d",[indexPath section], [indexPath row] ];

Я думаю, что это может решить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...