将 NSArray 嵌套到 UITableView
Posted
技术标签:
【中文标题】将 NSArray 嵌套到 UITableView【英文标题】:Nested NSArray into UITableView 【发布时间】:2010-12-14 02:22:49 【问题描述】:我到处寻找这个,但我无法找到确切的答案......都有细微的变化。
无论如何,我调用一个返回以下内容的 json 页面(来自 NSLog):
messages =
1 =
Body = "This is the body of message 1";
Title = "Message 1";
;
2 =
Body = "This is the body of message 2";
Title = "Message 2";
;
;
然后我将数据保存到一个 NSDictionary(称为 messageArray)中。 (数组是一个 NSMutableArray)
然后我做:
// Customize the appearance of table view cells.
- (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];
//put rowsarray into dictionary
NSDictionary *dictionary = [messageArray objectAtIndex:indexPath.section];
//new dictionary into array
NSArray *messages = [dictionary objectForKey:@"messages"];
NSLog(@"the message array = %@",messages );
//this fails
cell.textLabel.text = [messages objectAtIndex:indexPath.row];
return cell;
返回的 NSLog(所以我假设我的 json 数组工作正常):
the message array =
1 =
Body = "This is the body of message 1";
Title = "Message 1";
;
2 =
Body = "This is the body of message 2";
Title = "Message 2";
;
我知道我没有正确标记 textlabels.text,但我不确定如何循环遍历“消息”数组,以显示数组中的所有“标题”值,以显示在我的 UITableView列表。
我确定我错过了一些如此简单的东西......但直到现在它一直让我感到困惑。欢迎任何链接......我会继续搜索自己......
【问题讨论】:
【参考方案1】:NSArray *messages = [dictionary objectForKey:@"messages"];
如果你在这里拿到你的字典,这行的需要是什么
NSDictionary *dictionary = [messageArray objectAtIndex:indexPath.section];
现在,您知道将数据附加到字典的键是什么了。
那么简单
cell.textLabel.text = [dictionary valueForKey:@"Title"];
cell.detailTextLabel.text= [dictionary valueForKey:@"Body"];
【讨论】:
【参考方案2】:这个电话
cell.textLabel.text = [messages objectAtIndex:indexPath.row];
看起来它正在返回一个字典,而您正试图将它填充到一个测试字段中。我会先确认这是一本字典,例如:
NSLog(@"%@", [messages objectAtIndex:indexPath.row])
如果那不是一个字符串,那可能是你的问题。
要得到你想要的字符串,你可以这样做:
[[messages objectAtIndex:indexPath.row] valueForKey:@"Title"]
【讨论】:
我已经添加了这一行:NSLog(@"%@", [messages objectAtIndex:indexPath.row]);,没有爱。我将无法识别的选择器发送到实例。【参考方案3】:cell.textLabel.text = [[messages objectAtIndex:indexPath.row] objectForKey:@"Title"];
cell.detailTextLabel.detailLabel = [[messages objectAtIndex:indexPath.row] objectForKey:@"Body"];
【讨论】:
我已经尝试了设置 textLabel 的两种想法,但我一无所获。我想我必须查看我的字典和/或获取字符串。 你用什么把json对象转成字典?【参考方案4】:我对问题进行了“半”排序。我已经从 json 数据中删除了索引,所以现在它看起来像:
messages = (
Body = "This is the body of message 1";
Title = "Message 1";
,
Body = "This is the body of message 2";
Title = "Message 2";
);
并已将其用于填充表格:
- (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];
//put rowsarray into dictionary
NSDictionary *dictionary = [messageArray objectAtIndex:indexPath.section];
NSLog(@"dictionary = %@", dictionary );
//new dictionary into array
NSArray *messages = [dictionary objectForKey:@"messages"];
//NSArray *message=[[messages allKeys] sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"array messages = %@", messages );
cell.textLabel.text = [[messages objectAtIndex:indexPath.row] objectForKey:@"Title"];
return cell;
我希望这对某人有所帮助。
【讨论】:
以上是关于将 NSArray 嵌套到 UITableView的主要内容,如果未能解决你的问题,请参考以下文章
来自 plist 的 UITableView 加载到字典的 NSArray
如何切换到将 Core Data 用于简单的 UITableView 而不是 NSArray?
UITableview NSarray isEqualToString 无法识别的选择器发送到实例
如何在ios中使用NSDictionary将两个NSArray对象显示为UITableview的部分[重复]