我正在尝试将信息显示到带有2个动态单元格的分组UITableView
中。每个分组的UITableView
需要在单个视图中调用10次;每个分组UITableView
在其2个单元格中显示不同的信息。
现在我正在尝试显示存储在posts
中的数据库中的所有数据。但是,当我运行此版本时,应用程序崩溃。如果我将[self.posts count]
中的返回numberOfSectionsInTableView:
更改为返回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;
}
答案 0 :(得分: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;
}
答案 1 :(得分: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;
}