我设计了一个用于异步http请求处理的类“ AsyncHttpRequest”,该类初始化程序将一个块作为参数。
从“ AsyncHttpRequest”类的以下委托实现中调用该块:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
NSDictionary *dict = [NSJSONSerialization
JSONObjectWithData:_dataResponseData //1
options:kNilOptions
error:&error];
myBlock(dict);
}
我正在从像下面这样的视图控制器创建上述类的实例
- (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..
}];
}
它给出了以下错误:
错误:地址不包含指向目标文件中某个部分的部分
有没有办法将数据从块保存到obj-c中的属性或外部对象?
谢谢...。我已经尝试了最近3个小时,但没有任何解决方案。
谢谢
最佳答案
我认为myDic
可能在使用前已被释放。
这是我的理由,-[AsyncHttpRequest initWithUrl:withBlock:]
捕获了块,但未保留myDic
。在将来的某个时候,将调用connectionDidFinishLoading
方法,但是到那时,myDic
变量由于已被释放而超出了范围。
说得通?
如果是这种情况,则可能的解决方案可能包括:
保留myDic
,然后再将其传递给-[AsyncHttpRequest initWithUrl:withBlock:]
方法。注意:myDic
应该是一个实例变量/
在NSDictionary
上创建一个AsyncHttpRequest
属性,并将该属性设置为myDic
。
关于objective-c - 没有办法将数据从块保存到ios obj-c中的属性或外部对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13406346/