0

我正在使用核心数据来获取实体。我只希望这些结果显示在我的表格视图的第二部分中,而其他内容显示在另一部分中...我的应用程序没有崩溃,但获取的数据没有显示在表格视图中...我也很确定我正在正确获取数据。

这是一些代码。

- (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];
}

if (indexPath.section==0){
    switch (indexPath.row) {
        case 0:
            cell.textLabel.text = _team.teamName;
            break;
        case 1:
            cell.textLabel.text = _team.headCoach;
            break;
        default:
            break;
    }

}

if (indexPath.section ==1) {
    Player *p = [_fetchedResultsController objectAtIndexPath: indexPath];
    cell.textLabel.text = p.firstName;
    cell.detailTextLabel.text = p.team.teamName;
}       

return cell;

}
4

1 回答 1

1

有几个问题,首先你应该只有一个部分,所以你不需要访问部分属性。所以试试这个

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    switch(section){
        case 0:
            return 7;
        case 1:
            return [self.fetchedResultsController.fetchedObjects count];
    }
    return 0;
}

其次,您在使用以下代码的位置存在问题:

Player *p =[_fetchedResultsController objectAtIndexPath: indexPath];

这是导致问题的原因,因为您在两个部分都调用它,而您的 fetch 只有一个部分。

要修复崩溃,请使用检查正确 indexPath.section 的条件对其进行包装,或者将其放在第 1 节的 switch/case 语句中。您可以执行以下操作:

- (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];
    }

    if (indexPath.section==0){
        switch (indexPath.row) {
        case 0:
            cell.textLabel.text = _team.teamName;
            break;
        case 1:
            cell.textLabel.text = _team.headCoach;
            break;
        default:
            break;
        }

    }else{
        Player *p = [self.fetchedResultsController.fetchedObjects objectAtIndex: indexPath.row];
        cell.textLabel.text = p.firstName;
        cell.detailTextLabel.text = p.team.teamName;
    }       

    return cell;

}

祝你好运

于 2012-07-06T16:54:30.093 回答