2015-04-03 82 views
-1

我对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]; 
    } 

但标签上打印的值为空。当我们获取信息并在桌面视图中显示时,我们设置了代表。但对于一个标签我们不设置委托。所以我很困惑问题是什么?我忘了设置一个委托或我错误地传递数据。请点击下面的功能。

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

当按下按钮,您启动负载。加载完成后(一段时间后),调用connectionDidFinishLoading:方法。但在此之前,“goldRate”将为零(因为它尚未初始化)。

坐落在connectionDidFinishLoading标签:不是,你拥有它,和值将出现。

+0

感谢,做的工作。但是有没有一种方法可以将此值从connectionDidFinishLoading传递到我的代码中的另一个方法/函数?因为如果我尝试通过从connectionDidFinishLoading调用将值传递给另一个函数,它不会保存该值。 – 2015-04-03 00:26:29

+0

你可以使它成为一个成员变量 – 2015-04-03 14:12:56