我正在使用启用了 ARC 和情节提要的 Xcode 4.4.1(以防这会有所不同)
我有一个带有表格视图的 UITableViewController(表格视图使用“字幕”单元格)
我正在使用 NSArray 来填充我的表格:
@property (strong, nonatomic) NSArray *myData;
我在 viewDidLoad 中获取此表中的数据
- (void)viewDidLoad
{
[super viewDidLoad];
self.myData = [self.myCalendarModel GetWeightHistory] ;
}
然后我有: numberOfSectionsInTableView 和 numberOfRowsInSection
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.myData count];
}
最后是我的 cellForRowAtIndexPath
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"WeighDataCell";
UITableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
WeightHistory *myDataForCell = [self.myData objectAtIndex:indexPath.row];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"dd.MM.YYYY"];
NSString *dateString = [dateFormat stringFromDate:myDataForCell.weightDate];
cell.textLabel.text = dateString;
cell.detailTextLabel.text = [myDataForCell.weight description];
return cell;
}
我可以毫无问题地展示我的桌子。我有空间显示 6 个单元格,我的 NSArray 有 6 条记录。当我在我的桌子上向下滚动时,我没有任何问题。
当我向上滚动时,如果没有单元格离开视图,我没有问题。当我松开手指时,只要一个单元格不在视野范围内,就会出现 Exc_bad_access 错误。
当使用 NSZombieEnable 进行调试时,我可以看到:
[CalendarHistoryTableViewController tableView:cellForRowAtIndexPath:]: message sent to deallocated instance 0x6eaf6f0
所以我想我的手机被释放了,这就是我遇到这个问题的原因。但我不知道何时以及如何防止这种情况。
感谢您的任何帮助,您可以提供 !埃里克
@FaddishWorm是的,标识符已设置,如果单元格不为零,则表示已分配。但这部分似乎正在工作,因为我可以将我的数据放到屏幕上。
@Pandey_Laxman感谢您的评论。这几乎是我在这个类中唯一的代码。要检查问题是否与我的 WeightHistory 对象无关,我已从代码中删除了这部分,但我仍然遇到相同的错误
这就是我的新 cellForRowAtIndexPath 的样子:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"WeighDataCell";
UITableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.textLabel.text = @"test";
cell.detailTextLabel.text = @"test2";
return cell;
}