-(NSDictionary *)fetchFromUrl:(NSString *)url{
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
completionHandler:
^(NSData *data, NSURLResponse *response, NSError *error) {
dataFetched = [NSJSONSerialization JSONObjectWithData:data
options:0
error:NULL];
}];
[task resume];
NSLog(@"dataFetched, %@", dataFetched);
return dataFetched;
}
所以我尝试将dataFetched作为全局变量,以便我可以在我的.m文件中访问它并使其可以被其他.m文件访问,但是当我尝试NSLog
从其他.m文件中获取dataFetched它输出( null )。无论如何,我可以在我需要数据的其他.m文件中访问数据吗?
答案 0 :(得分:1)
你需要在你的方法中使用block,而不是返回NSDictionary
,所以改变你的代码就像这样。
首先像这样改变你的方法
-(void)fetchFromUrl:(NSString *)url withDictionary:(void (^)(NSDictionary* data))dictionary{
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
completionHandler:
^(NSData *data, NSURLResponse *response, NSError *error) {
NSDictionary *dicData = [NSJSONSerialization JSONObjectWithData:data
options:0
error:NULL];
dictionary(dicData);
}];
[task resume];
}
现在像这样调用你的方法
[self fetchFromUrl:urlStr withDictionary:^(NSDictionary *data) {
self.dataFetched = data;
NSLog(@"data %@",data);
}];
答案 1 :(得分:0)
如果您修改了区块内的NSDictionary
,则需要为您的财产声明__block
属性,如下所示
@property (nonatomic, strong) __block NSDictionary *dataFetched;
查看doc
使用__block变量共享存储如果您需要能够 您可以从块中更改捕获变量的值 在原始变量上使用__block存储类型修饰符 宣言。这意味着变量存在于存储中 在原始变量的词法范围和任何之间共享 在该范围内宣布的块。