我是初学者,正在尝试Json解析。我正在成功解析我需要的数据。但问题是我不知道如何在另一个函数中保存和使用该值。
现在,为了简单起见,我正在查看controller.m中的所有内容。意思是我的所有代码都在viewcontroller.m中 稍后会使用一个单独的类。
我的故事板上有一个按钮和一个标签。所以我试图从Json .api中获取一个值,并希望在标签中显示该值。当用户按下按钮时,将触发解析。你可以在下面。
- (IBAction)btnPressed:(id)sender {
NSURL *url=[NSURL URLWithString:@"http:........myweb"];
NSURLRequest *request=[NSURLRequest requestWithURL:url];
connection=[NSURLConnection connectionWithRequest:request delegate:self];
if(connection)
{
webData=[[NSMutableData alloc]init];
self.outputLbl.text = [NSString stringWithFormat:@"%@", goldRate];
}
但标签中打印的值为null。当我们获取信息并在tableviews中显示时,我们设置了委托。但对于标签,我们不设置委托。所以我很困惑这个问题是什么?我忘记设置代表或我错误地传递数据。请参考下面的功能。
-(void) connectionDidFinishLoading:(NSURLConnection *)connection{
NSDictionary *allDataDictionary=[NSJSONSerialization JSONObjectWithData:webData options:0 error:nil];
NSArray *myDataArray=[allDataDictionary objectForKey:@"data"];
NSArray *myGoldArray=[myDataArray objectAtIndex:0];
goldRate=[[myGoldArray objectAtIndex:1] stringValue];
}
我把这个goldRate变成了一个全局变量。但是当我调试我的程序时。在connectionDidFinishLoading中,goldRate值绝对是我想要的。但是当我尝试在btnPressed函数中使用这个goldRate时,在该函数中该值为null。
请帮忙。
答案 0 :(得分:0)
按下按钮时,您将启动加载。当加载完成(稍后一段时间)时,将调用connectionDidFinishLoading:方法。但在此之前,“goldRate”将为零(因为它尚未初始化)。
在connectionDidFinishLoading中设置标签:而不是您拥有的标签,并显示该值。