if语句后的变量值为null

时间:2014-02-09 20:46:23

标签: objective-c url if-statement nsstring objective-c-blocks

这里我从网址获取数据。

我在我的视图控制器的头文件中声明了我的NSString

@property NSString *contentsOfUrl;

然后我获取网址的内容并将其分配给此字符串

-(void)press

{

NSURLSession *session1 = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

[[session1 dataTaskWithURL:[NSURL URLWithString:@"http://api.lmiforall.org.uk/api/v1/soc/code/2222"] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

if (((NSHTTPURLResponse*) response).statusCode == 200) {

        if (data) {

           contentsOfUrl = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];   
        }

    }

}] resume];


NSLog(@"%@", contentsOfUrl);


 }

由于某种原因,我的变量为null。但是,当我将NSLog放在if语句中时,它具有正确的数据。

1 个答案:

答案 0 :(得分:1)

这是因为contentsOfUrl是在称为异步的完成处理程序内分配的。

所以你的阻止:

^(NSData *data, NSURLResponse *response, NSError *error) {

if (((NSHTTPURLResponse*) response).statusCode == 200) {

        if (data) {

           contentsOfUrl = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];   
        }

    }

}

在NSLog行之后被调用。 如果你想对这些数据做些什么,请从块内部进行操作