Iphone 如何将此JSON数据放入表视图中?请帮帮我,我';我生活在噩梦中:)

Iphone 如何将此JSON数据放入表视图中?请帮帮我,我';我生活在噩梦中:),iphone,json,parsing,uitableview,Iphone,Json,Parsing,Uitableview,关于将JSON数据放入表视图,我有一个问题。我已经成功地解析了数据,因为它将出现在我的控制台中——但我一辈子都不知道如何将这些数据放到我的表视图中。我花了整整一个星期的时间试图让它发挥作用,在阳光下尝试各种各样的东西 大多数时候,它只是崩溃,有时它会告诉我“[NSCFString count]:无法识别的选择器”,我相信这是因为我试图计算引发异常的字符串而发生的不管怎样,使用下面的代码,它只在控制台中打印我想要的数据,并在表视图中显示大量灰色线条,因此不会崩溃(我想这是目前我能做的最好的事情)

关于将JSON数据放入表视图,我有一个问题。我已经成功地解析了数据,因为它将出现在我的控制台中——但我一辈子都不知道如何将这些数据放到我的表视图中。我花了整整一个星期的时间试图让它发挥作用,在阳光下尝试各种各样的东西

大多数时候,它只是崩溃,有时它会告诉我“[NSCFString count]:无法识别的选择器”,我相信这是因为我试图计算引发异常的字符串而发生的不管怎样,使用下面的代码,它只在控制台中打印我想要的数据,并在表视图中显示大量灰色线条,因此不会崩溃(我想这是目前我能做的最好的事情)

对于如何使用所有事件名填充表的任何帮助/建议,我们将不胜感激。我对此视图的最终计划是在列表中包含事件名称,选中该列表后,将推送一个新的视图控制器,显示该特定事件的数据

以下是查看加载方法:

- (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;
}

提前感谢,我们非常欢迎并感谢您提供的任何帮助或建议:)

如果我是您,我会创建一个自定义对象:

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;

如果我是你,我会创建一个自定义对象:

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;

到现在为止,您可能已经解决了这个问题,但是在第一段代码中没有初始化eventNameList,而是初始化另一个名为events的变量

根据eventNameList的实际情况,您可能会获得无法识别的计数选择器

如果您进行更改,tableView代码似乎应该可以工作

return [eventNameList count];


到现在为止,您可能已经解决了这个问题,但是在第一段代码中没有初始化eventNameList,而是初始化另一个名为events的变量

根据eventNameList的实际情况,您可能会获得无法识别的计数选择器

如果您进行更改,tableView代码似乎应该可以工作

return [eventNameList count];


什么是失败?您是否尝试记录cellValue字符串?并确保它已经准备好了?失败的是什么?您是否尝试记录cellValue字符串?确保一切都准备好了吗?嘿,富尔维奥,谢谢你的及时回复。。我惊慌失措地躲在一个房间里想把它做完。您是对的,最好创建一个新类,然后将单个数据位提取到该对象中。。与从原始JSON中提取的内容相比,xcode更容易计算这些内容。。希望这能帮助其他人解决这个问题。。再次感谢。嘿,富尔维奥,谢谢你的及时回复。。我惊慌失措地躲在一个房间里想把它做完。您是对的,最好创建一个新类,然后将单个数据位提取到该对象中。。与从原始JSON中提取的内容相比,xcode更容易计算这些内容。。希望这能帮助其他人解决这个问题。。再次感谢。您好,非常感谢您的回复,我想这可能会奏效,尽管我还没有尝试过:S..再次感谢您的输入。。我希望这对其他有同样问题的人也有帮助。我,非常感谢您的回复,我想这可能会奏效,尽管我还没有尝试过:S..再次感谢您的输入。。我希望这对其他有同样问题的人也有帮助