从 nsdictionary 填充 uitableview

Posted

技术标签:

【中文标题】从 nsdictionary 填充 uitableview【英文标题】:populate an uitableview from a nsdictionary 【发布时间】:2013-10-19 12:02:04 【问题描述】:

我有一个来自 json 的 nsdictionary,它的响应是:

(
    email = "something@gmail.com";
    name = "User1";
,
    
    email = "something2@gmail.com";
    name = "user2";
)

这是我在 de .m 文件中的代码:

   - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response



    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*) response;

    int errorCode = httpResponse.statusCode;

    NSString *fileMIMEType = [[httpResponse MIMEType] lowercaseString];

    NSLog(@"response is %d, %@", errorCode, fileMIMEType);



- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

    //NSLog(@"data is %@", data);

    NSString *myString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

    //NSLog(@"string is %@", myString);
    NSError *e = nil;

    usersDictionary = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&e];

    NSLog(@"dictionary is %@", usersDictionary);


- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 



    // inform the user

    NSLog(@"Connection failed! Error - %@ %@",

          [error localizedDescription],

          [[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]);



- (void)connectionDidFinishLoading:(NSURLConnection *)connection 

   NombreUsuario = [[NSMutableArray alloc] initWithCapacity:[usersDictionary count]];



我用它来返回section中的行数:

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

    // Return the number of rows in the section.
    return [usersDictionary count];

但我不知道如何将这对数据 email,name 放入 tableview 中,其中每个单元格都必须显示名称的主标签和电子邮件的副标题。

提前致谢。

【问题讨论】:

您显示的 JSON 是一个字典数组...您的具体问题是什么? 这确实是一个基本问题。鉴于您意识到您有一个 NSArrayNSDictionary 对象(正如 Wain 已经指出的那样),它非常适合表格视图数据源,您将在这里找到答案:Table View Programming Guide for ios,尤其是章节“仔细查看表格视图单元格”。 好吧,很抱歉问了这样一个基本问题,但我找不到如何从 de 字典中获取 nsarray,我总是定位一个“[__NSArrayM objectForKey:]: unrecognized selector sent to instance”我不知道我真的不知道如何处理这个问题,我已经阅读了两天的所有网络。 【参考方案1】:

我将回答我自己的问题,以供将来可能需要的人参考。

首先我必须将 json 响应存储在 NSMutableArray 而不是字典中。

由于我有一系列字典,因此我有两个级别的信息,我试图将其分解为新对象,但这不是正确的方法,因此要访问第二级,我必须导航到它:

cell.textLabel.text = [[NombreUsuario objectAtIndex:indexPath.row]objectForKey:@"name"];

使用这个 [NombreUsuario objectAtIndex:indexPath.row] 我访问第一级信息,然后使用 objectForKey:@"name" 我得到与键“name”匹配的所有值。

对于细节标签文字也是一样的:

cell.detailTextLabel.text = [[NombreUsuario objectAtIndex:indexPath.row]objectForKey:@"email"];

感谢大家的帮助。

【讨论】:

【参考方案2】:

我不会为你编写代码,但你需要看看如何实现UITableViewDataSource。特别是,您要执行的操作将在 - tableView:cellForRowAtIndexPath: 方法中。互联网上有数以千计的好例子供您参考。

【讨论】:

我知道如何填充表格视图,但我不知道如何处理字典数组。

以上是关于从 nsdictionary 填充 uitableview的主要内容,如果未能解决你的问题,请参考以下文章

如何使用保留关键字访问 NSDictionary 元素?

如何从使用 JSONKit 创建的 NSDictionary 中正确填充 UITableView NSArray?

Obj-C UITable 没有填充 MutableArray

如何使 UIButton 从 UITable 中的选择中播放相应的音频剪辑?

从 NSDictionary 检索数据

用 NSDictionary 填充数组