将 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的部分[重复]

如何将 NSDictionarys 的 NSArray 变成 NSDictionarys 的嵌套 NSArray

UITableView 中动画插入/删除的 2 个 NSArray 的区别