2011-10-23 100 views
0

我正在用CoreData更新UITableView。在啓動時,第一行顯示爲(空)。如果我向下滾動/向上,它會加載。它只是不顯示最初。UITableView顯示(空)第一行

- (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

如果您將第一個單元格關閉並返回到屏幕上,是否會加載正確的文本?此外,您可能需要查看NSFetchedResultsController以使用Core Data結果填充您的UITableView。其設計和高度優化的用例。 –

+0

是的,他們按照操作中提到的那樣做。我有點新鮮。 –

+0

很難說出發生了什麼事。我會在'-tableView:cellForRowAtIndexPath:'中設置一個斷點。第一次,進入'-getProjectValueForKey:atIndex:',看看它爲什麼會回到零。 –

回答

1

實際上,Core Data中已經內置了一個很棒的「dataManager」。它被稱爲NSFetchedResultsController。您可以隨時檢索您的表格單元格中正確的數據對象與

[[self.fetchedResultsController fetchedObjects] objectAtIndex:indexPath.row]; 

這通常是內部tableView:cellForRowAtIndexPath:完成,而不是在一些其他的輔助功能。獲取的結果控制器將負責檢索所需的所有數據,以便顯示它。

另請參閱Apple針對此通用設計模式的衆多Core數據代碼示例。