我有一个工具栏中的刷新按钮,重新生成NSArray
并尝试重新加载表的内容。UITableView不重装部分和内容
不过,我是否具备:
if (boolCondition) {
[self refreshTableDataSet];
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:kTableSectionOfInterest] withRowAnimation:UITableViewRowAnimationFade];
}
或:
if (boolCondition) {
[self refreshTableDataSet];
[self.tableView reloadData];
}
所有其他尝试刷新表失败。有时它起作用,有时不起作用。
我在-tableView:cellForRowAtIndexPath:
一些NSLog
语句,让我知道当被解雇这个方法。刷新失败时,我看不到这些NSLog
语句的输出。
当我有新数据时,是否有重新加载表视图时丢失的东西?
编辑
在我-refreshTableDataSet
方法:
- (void) refreshTableDataSet {
NSSortDescriptor *_objectTypeSorter = [[[NSSortDescriptor alloc] initWithKey:@"object.type" ascending:YES] autorelease];
NSSet *_objectSet = [managedObjectContext fetchObjectsForEntityName:@"Object" withPredicate:[NSPredicate predicateWithFormat:[NSString stringWithFormat:@"group.name like '%@'", [group name]]]];
self.objects = [[[_objectSet allObjects] sortedArrayUsingDescriptors:[NSArray arrayWithObjects: _objectTypeSorter, nil]] retain];
}
在我的表视图-tableView:cellForRowAtIndexPath:
方法:
...
Object *_object = [self.objects objectAtIndex:indexPath.row];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}
cell.textLabel.text = _object.name;
cell.detailTextLabel.text = _object.type;
cell.imageView.image = [UIImage imageNamed:@"GroupType.png"];
cell.accessoryView = [self imageViewForObjectDetailType:_object.type];
...
我对accessoryView的方法称为-imageViewForObjectDetailType
,刚刚返回a UIImageView
:
return [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"GenericObjectDetailType.png"]] autorelease];
是否有retain
和/或release
我缺少的消息?
我已经添加了代码,显示了我如何设置我的'NSArray'。它看起来像我失去了一些东西?谢谢! – 2009-09-23 09:10:57
我在错误的地方进行了'if(cell == nil)'测试。我有一个switch-case树,必须将条件移动到每个case块。感谢您彻底的想法。 – 2009-09-23 18:01:25
好侦探! – mahboudz 2009-09-23 19:43:59