Iphone ios-如何在UITableView中从JSON url加载数据?
我是iPhone开发的新手,我正在尝试从Iphone ios-如何在UITableView中从JSON url加载数据?,iphone,ios,json,uitableview,Iphone,Ios,Json,Uitableview,我是iPhone开发的新手,我正在尝试从UITableview中的JSONUrl绑定数据,但下面的代码中出现了一个错误 - (void)viewDidLoad { SBJsonParser *parser = [[SBJsonParser alloc] init]; NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://80f237c226fa45aaa09a5f5c82339d46
UITableview
中的JSON
Url绑定数据,但下面的代码中出现了一个错误
- (void)viewDidLoad
{
SBJsonParser *parser = [[SBJsonParser alloc] init];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://80f237c226fa45aaa09a5f5c82339d46.cloudapp.net/DownloadService.svc/Courses"]];
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
statuses = [parser objectWithString:json_string error:nil];
[self.dropdownTblView reloadData];
for (NSDictionary *status in statuses)
{
_altTitle = [status valueForKey:@"Title"];
NSLog(@"Title %@",_altTitle);
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSLog(@"%d",[statuses count]);
return [statuses count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
return cell;
//Here I'm getting an error
id obj = [statuses objectAtIndex:indexPath.row];
NSString *name = [obj valueForKey:@"Title"];
cell.textLabel.text =name;
return cell;
}
这是我的JSON
[
{
"Id": 1,
"Title": "Tamil to English",
"AltTitle": "த|மி|ழ்| |மூ|ல|ம்| |ஆ|ங்|கி|ல|ம்",
"Description": "Learn English through Tamil",
"Code": 1,
"Version": "1.0",
"SourceLanguageIndicator": "அ",
"TargetLanguageIndicator": "A",
"SourceLanguageCode": "ta",
"TargetLanguageCode": "en",
"Updated": "2013-02-21T03:33:19.6601651+00:00"
}
]
有什么想法吗?提前谢谢。可能是因为您将
obj
的类型设置为id
。它太通用,可能不知道如何响应valueForKey
。您是否尝试将obj
声明为NSDictionary*
?如下面的代码所示:
NSDictionary *obj = [statuses objectAtIndex:indexPath.row];
NSString *name = [obj valueForKey:@"Title"];
可能是因为您将
obj
的类型设置为id
。它太通用,可能不知道如何响应valueForKey
。您是否尝试将obj
声明为NSDictionary*
?如下面的代码所示:
NSDictionary *obj = [statuses objectAtIndex:indexPath.row];
NSString *name = [obj valueForKey:@"Title"];
如果在同一范围内返回两次单元格,请尝试删除第一个
返回单元格
,也就是在for
循环之前调用表上的reloadData
;在这种情况下,表的数据源可能仍然为空,因此在for
循环之后调用reloadData
编辑:
发生的事情很奇怪,objectFromString
aNSArray
或NSDictionary
,但它似乎指向一个NSSet
。此外,我还可以建议两件事:
UITableViewCell
上调用autorelease
。在本例中,您在viewDidLoad
中泄漏了解析器
和json_字符串
,因此释放它们
[super viewDidLoad]代码>(您没有在代码中执行此操作)
如果在同一范围内返回两次单元格,请尝试删除第一个
返回单元格
,也就是在for
循环之前调用表上的reloadData
;在这种情况下,表的数据源可能仍然为空,因此在for
循环之后调用reloadData
编辑:
发生的事情很奇怪,objectFromString
aNSArray
或NSDictionary
,但它似乎指向一个NSSet
。此外,我还可以建议两件事:
UITableViewCell
上调用autorelease
。在本例中,您在viewDidLoad
中泄漏了解析器
和json_字符串
,因此释放它们
[super viewDidLoad]代码>(您没有在代码中执行此操作)
在您的
ViewDidload
中使用下面的代码并运行该项目,它将起作用
注意:您返回单元格两次,请尝试删除第一次返回 细胞
在您的
ViewDidload
中使用下面的代码并运行该项目,它将起作用
注意:您返回单元格两次,请尝试删除第一次返回 细胞 记住rootDict和密钥将声明为全局。
记住rootDict和键将声明为全局。是的,我想对了,状态不是NSArray,而是NSSet,因此如果在NSSet上调用objectAtIndex,它将崩溃。要获取数组,请将NSSet转换为NSArray
NSArray *array =[statuses allObjects];
是的,我的想法是对的,状态不是NSArray,而是NSSet,所以如果在NSSet上调用objectAtIndex,它将崩溃。要获取数组,请将NSSet转换为NSArray
NSArray *array =[statuses allObjects];
你犯了什么错误?那么?错误是什么?您在同一范围内返回两次单元格,请尝试删除第一个
返回单元格代码>检查返回的是什么状态?我的意思是,一旦你得到解析数据,只需打印并检查它是字典还是数组。然后删除第一个返回单元格语句。你能告诉我们你得到了什么错误吗?你得到了什么错误?那么?错误是什么?您在同一范围内返回两次单元格,请尝试删除第一个返回单元格代码>检查返回的是什么状态?我的意思是,一旦你得到解析数据,只需打印并检查它是字典还是数组。然后删除第一个返回单元格语句。你能告诉我们你得到了什么错误吗?我想这不是问题所在。既然他知道有一本字典,就可以把它设为id。我想这不是问题所在。因为他知道有一本字典,所以可以把它设为id。谢谢你宝贵的回复,但我还是收到了一封电子邮件error@user2439531你的错误是什么?另外,我不知道您是否在使用ARC。程序接收到信号:“EXC_BAD_ACCESS”。您是否已将[self.dropdownTblView reloadData]代码>在我的响应中所述的for循环之后?可能设置一个断点来检查哪一行引发了错误;谢谢你宝贵的回复,但我还是收到了一封信error@user2439531你的错误是什么?另外,我不知道您是否在使用ARC。程序接收到信号:“EXC_BAD_ACCESS”。您是否已将[self.dropdownTblView reloadData]代码>在我的响应中所述的for循环之后?可能设置一个断点来检查哪一行引发了错误;可能是的,但我想知道为什么objectFromString
返回的是集合而不是数组?objectFromString
的文档说明:对象所代表的NSArray或NSDictionary,如果发生错误,则说明为零。
打印状态并检查返回的内容,NSArray或NSDictionary?请显示您得到的确切内容。只需打印为NSLog(@“%@,[parser objectWithString:json_string error:nil];);。不需要分配给任何对象。可能是的,但我想知道为什么objectFromString
返回的是集合而不是数组?objectFromString
的文档说明:NSArray