如何将此 JSON 数据放入我的表格视图中?请帮助我,我生活在噩梦中:)
Posted
技术标签:
【中文标题】如何将此 JSON 数据放入我的表格视图中?请帮助我,我生活在噩梦中:)【英文标题】:How do I put this JSON data into my table view? Please help me, I'm living in a nightmare :) 【发布时间】:2011-03-14 22:54:34 【问题描述】:我有一个关于将 JSON 数据放入表格视图的问题。我已经成功解析了数据,因为它出现在我的控制台中 - 但我一生都无法弄清楚如何将这些数据放入我的表格视图中。我花了整整一周的时间试图让它发挥作用,尝试在阳光下尝试各种组合。
大多数时候它只是崩溃,有时它告诉我“[NSCFString count]:无法识别的选择器”,我相信这是因为我试图计算一个引发异常的字符串? - 无论如何,使用下面的代码,它只是在控制台中打印我想要的数据,并在表格视图中向我显示一堆灰线,所以它不会崩溃(这是我目前能做的最好的事情)。
任何有关如何使用所有 eventNames 填充表格的帮助/建议将不胜感激。我对这个视图的最终计划是让列表中的 eventNames 在选择时推送一个新的视图控制器,显示该特定事件的数据。
这里是视图做的加载方法:
- (void)viewDidLoad
[super viewDidLoad];
NSURL *url = [NSURL URLWithString:@"http://myurl........."];
NSString *jsonreturn = [[NSString alloc] initWithContentsOfURL:url];
NSLog(jsonreturn); //successfully returns the result of the page
//to parse it i have made a sbjsonparser object
SBJsonParser *json = [[SBJsonParser new] autorelease];
NSError *jsonError;
NSDictionary *parsedJSON = [json objectWithString:jsonreturn error:&jsonError];
//if successful, i can have a look inside parsedJSON - its worked as an NSdictionary and NSArray
NSArray* events = [parsedJSON objectForKey:@"Events"];
//eventNameList = [parsedJSON objectForKey:@"Events"];
NSLog(@"show me events: %@", events);
//NSLog(@"show me events: %@", eventNameList);
//lets try and get to rows
//NSEnumerator *enumerator = [events objectEnumerator];
NSEnumerator *enumerator = [events objectEnumerator];
NSDictionary* item;
while (item = (NSDictionary*)[enumerator nextObject])
NSLog(@"event item:eventName = %@", [item objectForKey:@"EventName"]); //everything to this point works and shows in the console
这是表格视图代码:
//customise the number of sections in the table view
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
return 1;
//customise number of rows
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
return [eventNameList count];
NSLog(@"here");
//customise the appearance of table view cells
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
static NSString *CellIdentifier = @"Cell";
//try to get a reusable cell
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
//create a new cell if there is not reusable cell available
if (cell == nil)
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
//set the text display for the cell
NSString *cellValue = [eventNameList objectAtIndex:indexPath.row];
cell.textLabel.text = cellValue;
//NSLog(@"event item from table view:eventName = %@", eventNameList);
return cell;
在此先感谢,任何帮助或指点都非常欢迎和赞赏:)
【问题讨论】:
什么失败了?您是否尝试过记录 cellValue 字符串?并确保它已设置好? 【参考方案1】:如果我是你,我会创建一个自定义对象:
NSEnumerator *enumerator = [events objectEnumerator];
NSDictionary* item;
while (item = (NSDictionary*)[enumerator nextObject])
Event *event = [[Event alloc] init];
event.eventName = [item objectForKey:@"EventName"];
// set more properties here
[eventNameList addObject:event];
[event release];
然后你可以在你的cellForRowAtIndexPath:
中使用以下内容
Event *event = (Event *)[eventNameList objectAtIndex:indexPath.row];
cell.textLabel.text = event.eventName;
【讨论】:
嘿 Fulvio,感谢您的及时回复。在我恐慌中,我躲在一个房间里完成它。您是对的,最好创建一个新类,然后将单个数据位提取到该对象中。. 与从原始 JSON 中提取的内容相比,xcode 更容易计算这些数据.. 希望这对其他人有帮助这个问题..再次感谢。【参考方案2】:好吧,您现在可能已经解决了这个问题,但是您没有在第一段代码中初始化 eventNameList,而是初始化了另一个名为 events 的变量。
根据 eventNameList 的实际情况,您可能会得到一个无法识别的 count 选择器。
如果您更改,tableView 代码似乎应该可以工作
return [eventNameList count];
到
return [events count];
和
[eventNameList objectAtIndex:indexPath.row];
到
[events objectAtIndex:indexPath.row];
【讨论】:
嗨,非常感谢您的回复,我想这可能会奏效,尽管我还没有尝试过:S ..再次感谢您的意见..我希望这对任何人也有帮助其他人有同样的问题以上是关于如何将此 JSON 数据放入我的表格视图中?请帮助我,我生活在噩梦中:)的主要内容,如果未能解决你的问题,请参考以下文章