我设计了一个类“AsyncHttpRequest”用于异步http请求处理,并且该类初始值设定项采用一个 block 作为参数。
该 block 是从“AsyncHttpRequest”类的以下委托(delegate)实现中调用的:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
NSDictionary *dict = [NSJSONSerialization
JSONObjectWithData:_dataResponseData //1
options:kNilOptions
error:&error];
myBlock(dict);
我正在从 View Controller 创建上述类的实例,如下所示
- (void)viewDidLoad {
[super viewDidLoad];
__block NSDictionary *myDic;
AsyncHttpRequest *r = [[AsyncHttpRequest alloc] initWithUrl:urlStr withBlock:^(NSDictionary *d){
NSLog(@"List = %@",d); //Its working
NSDictionary *locDic = [[NSDictionary alloc] initWithDictionary:d];
// the above is working
myDic = d; //not working
myDic = [[NSDictionary alloc] initWithDictionary:locDic];
// The above code is not working..
}];
}
出现以下错误: 错误:地址不包含指向目标文件中的部分的部分
有没有办法将数据从 block 保存到 obj-c 中的属性或外部对象?
谢谢......我已经尝试了 3 个小时,但没有得到任何解决方案。
谢谢
最佳答案
我认为 myDic
可能在使用之前就被释放了。
这是我的推理,-[AsyncHttpRequest initWithUrl:withBlock:]
捕获了该 block ,但 myDic
未保留。在将来的某个时刻,connectionDidFinishLoading
方法会被调用,但到那时 myDic
变量现在已经超出范围,因为它已被释放。
有道理吗?
如果是这种情况,那么可能的解决方案可能包括:
- 在将
myDic
传递给-[AsyncHttpRequest initWithUrl:withBlock:]
方法之前保留它。注意:myDic
应该是一个实例变量/ - 在
AsyncHttpRequest
上创建一个NSDictionary
属性,并将该属性设置为myDic
。
关于objective-c - 有没有办法将数据从 block 保存到 ios obj-c 中的属性或外部对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13406346/