我有一个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。
答案 0 :(得分:3)
尝试从(非原子,弱)
更改属性NSMutableString *title;
NSMutableString *date;
to(nonatomic,strong)应该可以解决你的问题。
答案 1 :(得分:1)
-(void) ViewDidLoad {
[super ViewDidLoad];
parser = [Parser alloc] init];
您重新分配并重新初始化解析器,您是否正在重新加载数据的代码的任何部分?如果不是,您的数据存储将为空。
答案 2 :(得分:1)
我的建议:
delegate
和dataSource
设置正确,请检查。我在你的代码中没有看到它。registerClass:forCellReuseIdentifier:
或registerNib:forCellReuseIdentifier:
。无论如何,我习惯使用没有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);