当我在UITableViewController上滚动时,描述标签消失了

时间:2016-04-20 12:36:23

标签: ios objective-c uitableview

代码:

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的问题。我知道以前曾经问过这个问题,但我检查了所有我能找到的内容,但没有找到我的问题的答案。

1 个答案:

答案 0 :(得分:1)

问题可能在于TableItem属性。它们是weak,这意味着任何时刻都可以释放和填充实际的字符串。

因此,当您向上和向下滚动时,titletheDescription已经nil了。

更改TableItem类:

 @property (strong, nonatomic) NSString *title;
 @property (strong, nonatomic) NSString *theDescription;

或者,如果您想确保在为其属性分配新值后,无法修改这些值,请使用copy

 @property (copy, nonatomic) NSString *title;
 @property (copy, nonatomic) NSString *theDescription;