1

我正在尝试将信息显示到一个UITableView包含 2 个动态单元格的组中。每个分组UITableView需要调用 10 次到一个视图中;每个分组UITableView在其 2 个单元格中显示不同的信息。

现在我正在尝试显示我的数据库中存储在posts. 但是,当我运行此版本时,应用程序崩溃了。如果我将 return 更改[self.posts count]numberOfSectionsInTableView:return 1,我只能加载一个部分,如预期的那样。

我的问题是如何显示 10 个分组的表格部分,每个部分都有不同的信息?

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
//#warning Potentially incomplete method implementation.
// Return the number of sections.
return [self.posts count];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{


NSInteger returnValue = 2;
switch (section) {
    case 0:
    {
        returnValue = 2;
        break;
    }
    default:
        break;
}

return returnValue;

}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

NSString *CellIdentifier1 = @"Cell";


UITableViewCell *cell;
if (indexPath.section==0)
{
    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier1];
    if (cell == nil) {
                cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier1];
    }

    if (indexPath.row==0)
            {
                cell.textLabel.text = [[self.posts objectAtIndex:indexPath.row] objectForKey:@"name"];
            }
    if (indexPath.row==1)
            {
                cell.textLabel.text = [[self.posts objectAtIndex:indexPath.row] objectForKey:@"message"];
            }
}

return cell;

}
4

2 回答 2

1

当 section = 0 时,您正在创建单元格。您应该每次都创建单元格。您不能从cellForRowAtIndexPath方法返回 nil。

通过以下方式修改您的实现:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {

    NSString *CellIdentifier1 = @"Cell";        
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier1];

    if (cell == nil)
    {
         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier1];
    }

    if (indexPath.section==0)
    {
        if (indexPath.row==0)
        {
            cell.textLabel.text = [[self.posts objectAtIndex:indexPath.row] objectForKey:@"name"];
        }
        //Rest of the code..
    }
    else if(indexPath.section ==1)
    {
        //Do the work with section 1.
    }
    //do the work for other sections...

    return cell;
}
于 2013-04-24T04:02:30.827 回答
0

编写的代码足以满足您的情况。只需删除 if (indexPath.section==0){.cellForRowAtIndexPath

更新:根据您的观点,以下代码就足够了。如果您正确存储到posts

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

NSString *CellIdentifier1 = @"Cell";


UITableViewCell *cell = nil;

    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier1];
    if (cell == nil) {
                cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier1];
    }

    if (indexPath.row==0)
            {
                cell.textLabel.text = [[self.posts objectAtIndex:indexPath.section] objectForKey:@"name"];//Here modified `section` instead of `row`
            }
    else if (indexPath.row==1)
            {
                cell.textLabel.text = [[self.posts objectAtIndex:indexPath.section] objectForKey:@"message"];
            }


return cell;

}
于 2013-04-24T04:05:28.500 回答