我设计了一个用于异步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/

10-10 20:47