从 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 是一个字典数组...您的具体问题是什么? 这确实是一个基本问题。鉴于您意识到您有一个NSArray
的 NSDictionary
对象(正如 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的主要内容,如果未能解决你的问题,请参考以下文章
如何从使用 JSONKit 创建的 NSDictionary 中正确填充 UITableView NSArray?
Obj-C UITable 没有填充 MutableArray