代码:
ViewController.m
@interface ViewController ()
@property (strong,nonatomic) NSMutableArray<NSString *> *sections;
@property (strong,nonatomic) NSMutableArray<NSMutableArray<TableItem *> *> *items;
@property (strong,nonatomic) NSMutableArray<TableItem *> *sectionItems;
@end
...
- (NSInteger) numberOfSectionsInTableView: (UITableView *) tableView {
return _items.count;
}
- (NSString *) tableView: (UITableView *) tableView titleForHeaderInSection:(NSInteger) section {
NSLog(_sections[section]);
return _sections[section];
}
-(NSInteger) tableView: (UITableView *) tableView numberOfRowsInSection:(NSInteger)section {
return _items[section].count;
}
- (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath ];
TableItem *item = _items[indexPath.section][indexPath.row];
cell.textLabel.text = item.title;
cell.detailTextLabel.text = item.theDescription;
return cell;
}
全部显示应该如此。当我向下滚动并向后滚动时,描述标签已经消失。
某些背景信息:
TableItem.h
@interface TableItem : NSObject
@property (weak,nonatomic) NSString *title;
@property (weak,nonatomic) NSString *theDescription;
-(instancetype) initWithTitle: (NSString *) title theDescription: (NSString *) theDescription;
@end
这似乎是dequeueReusableCell
的问题。我知道以前曾经问过这个问题,但我检查了所有我能找到的内容,但没有找到我的问题的答案。
答案 0 :(得分:1)
问题可能在于TableItem属性。它们是weak
,这意味着任何时刻都可以释放和填充实际的字符串。
因此,当您向上和向下滚动时,title
和theDescription
已经nil
了。
更改TableItem类:
@property (strong, nonatomic) NSString *title;
@property (strong, nonatomic) NSString *theDescription;
或者,如果您想确保在为其属性分配新值后,无法修改这些值,请使用copy
:
@property (copy, nonatomic) NSString *title;
@property (copy, nonatomic) NSString *theDescription;