滚动时UITableViewCell内容丢失

时间:2013-09-29 08:13:46

标签: ios objective-c uitableview

我有一个Parser对象,其中包含来自互联网(文章)的15个项目。

我正在尝试在TableView中加载这些项目。我的问题是我在开始时有8个项目可见(4英寸视网膜模拟器)但是当它开始滚动时,几乎所有我的内容都丢失了,我看不到剩下的7个项目。不确定我做错了什么,这是我的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];

    parser = [[Parser alloc] init];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [[parser items] count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ArticleCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ArticleCell"];
    Article *article = [parser items][indexPath.row];

    cell.title.text = article.title;
    cell.date.text = article.date;

    return cell;
}

编辑:

这是滚动时显示的内容,如果我在返回cellRowAtIndexPath内的单元格之前记录数据:

2013-09-29 13:37:05.341 Inter[3685:a0b] Article for index: 0 . Title: Cagliari-Inter, tutte le curiosità
 ; date: (null) .
2013-09-29 13:37:05.343 Inter[3685:a0b] Article for index: 1 . Title: Cerrone "Oggi abbiamo vinto da squadra"
 ; date: (null) .
2013-09-29 13:37:05.344 Inter[3685:a0b] Article for index: 2 . Title: Le immagini del 10° "Memorial Prisco"
 ; date: (null) .
2013-09-29 13:37:05.345 Inter[3685:a0b] Article for index: 3 . Title: Primavera, Udinese-Inter 0-1
 ; date: (null) .
2013-09-29 13:37:05.345 Inter[3685:a0b] Article for index: 4 . Title: Tutte le immagini della vigilia di Cagliari-Inter
 ; date: (null) .
2013-09-29 13:37:05.346 Inter[3685:a0b] Article for index: 5 . Title: Udinese-Inter Primavera, 0-0 a fine primo tempo
 ; date: (null) .
2013-09-29 13:37:05.347 Inter[3685:a0b] Article for index: 6 . Title: Mazzarri "Rischio buccia di banana in un momento di euforia"
 ; date: (null) .
2013-09-29 13:37:05.348 Inter[3685:a0b] Article for index: 7 . Title: Inter Campus in Bosnia Erzegovina: passi avanti per i progetti a Sarajevo e Domanovici
 ; date: (null) .
2013-09-29 13:37:11.053 Inter[3685:a0b] Article for index: 8 . Title: (null) ; date: (null) .
2013-09-29 13:37:28.181 Inter[3685:a0b] Article for index: 9 . Title: (null) ; date: (null) .
2013-09-29 13:37:29.499 Inter[3685:a0b] Article for index: 10 . Title: (null) ; date: (null) .
2013-09-29 13:37:29.591 Inter[3685:a0b] Article for index: 11 . Title: (null) ; date: (null) .
2013-09-29 13:37:35.642 Inter[3685:a0b] Article for index: 1 . Title: (null) ; date: (null) .
2013-09-29 13:37:35.767 Inter[3685:a0b] Article for index: 0 . Title: (null) ; date: (null) .

编辑:

完整代码here

7 个答案:

答案 0 :(得分:3)

尝试从(非原子,弱)

更改属性
NSMutableString *title; 
NSMutableString *date;

to(nonatomic,strong)应该可以解决你的问题。

答案 1 :(得分:1)

 -(void) ViewDidLoad {
  [super ViewDidLoad];
    parser = [Parser alloc] init];

您重新分配并重新初始化解析器,您是否正在重新加载数据的代码的任何部分?如果不是,您的数据存储将为空。

答案 2 :(得分:1)

我的建议:

  1. 如果您的tableView的delegatedataSource设置正确,请检查。我在你的代码中没有看到它。
  2. 请检查您的表格视图中注册了哪些单元格类。我的意思是,您需要在某处使用tableView的registerClass:forCellReuseIdentifier:registerNib:forCellReuseIdentifier:
  3. 无论如何,我习惯使用没有IB或故事板的GUI(因此,我正在以编程方式执行所有操作),因此您可能不需要这样做。

    祝你好运。

答案 3 :(得分:0)

我之前有过类似的问题。我的问题的原因是我的视图控制器在滚动我的表视图后被释放了,你能检查一下你是否有相同的原因?

答案 4 :(得分:0)

尝试执行以下操作:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString * MyIdentifier = @"ArticleCell";
    ArticleCell *cell = [tableView dequeueReusableCellWithIdentifier: MyIdentifier];
    Article *article = [parser items][indexPath.row];

    cell.title.text = article.title;
    cell.date.text = article.date;

    return cell;
}

答案 5 :(得分:0)

问题是所使用的标识符应该是静态字符串

因此声明一个标识符statisc并分配它

static NSString *cellId = @"cellIdentifier";    
ArticleCell *cell = [tableView dequeueReusableCellWithIdentifier: cellId];

还要确保故事板单元格具有相同的标识符值。这里是'cellIdentifier'

答案 6 :(得分:0)

滚动时检查[[解析器项目]计数]会发生什么。我的猜测是它会减少,这会减少表格中的行数。

我可能在这里错了,因为我不知道什么是Parser(可能是你的自定义类?)但是如果它用于解析HTTP响应,那么解析完成后项目数可能会减少吗?

要检查解析器项目计数,请将以下内容添加到tableView:cellForRowAtIndexPath:

NSLog(@“Parser item count:%d”,parser.items.count);