我正在使用CoreData更新UITableView。在启动时,第一行显示为(null)。如果我向下/向上滚动,它会加载。它最初没有显示。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
[cell setAccessoryType: UITableViewCellAccessoryDisclosureIndicator];
}
// set text for each cell
[cell.textLabel setText: [dataManager getProjectValueForKey: @"Title" atIndex: [indexPath row]]];
[cell.detailTextLabel setText: [[[dataManager getProjectValueForKey: @"pid" atIndex:[indexPath row]] stringByAppendingString: @": "] stringByAppendingString: [dataManager getProjectValueForKey: @"Sponsor" atIndex:[indexPath row]]]];
return cell;
}
dataManager
正在与Core Data交谈。我觉得它可能在启动时落后或有什么东西,所以单元格在准备好之前试图显示数据。但我不知道。
答案 0 :(得分:1)
实际上,核心数据中已经内置了一个很棒的“dataManager”。它被称为NSFetchedResultsController
。您始终可以使用
[[self.fetchedResultsController fetchedObjects] objectAtIndex:indexPath.row];
这通常在tableView:cellForRowAtIndexPath:
内完成,而不是在其他辅助函数中完成。获取的结果控制器将处理检索显示它所需的数据所需的所有内容。
另请参阅Apple针对此常见设计模式的众多核心数据代码示例。