美文网首页
使用ASI库调用delegata报错thread 1:exc_b

使用ASI库调用delegata报错thread 1:exc_b

作者: 墨_辰 | 来源:发表于2018-04-13 17:06 被阅读0次

    使用ASI库调用delegata报错thread 1:exc_bad_access(code=EXC_I386_GPFLT),按照网上的一些经验,将getadata改为nil以后就可以顺利通过了。但是有需要接收服务器返回结果。

    情况:项目使用的ASI库上传文件,为了根据结果做一些后续的操作,使用了Delegata来接收服务端返回的结果。代码如下:

    [request setDelegate:self];

    //正常

    -(void)requestFinished:(ASIHTTPRequest *)request{

        NSLog(@"requestFinished");

    }

    //异常

    -(void)requestFailed:(ASIHTTPRequest *)request{

        NSLog(@"requestFailed");

    }

    //接收结果

    -(void)request:(ASIHTTPRequest *)request didReceiveData:(NSData *)data{

        //接收返回结果

        NSString* recvData =[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

        //NSString -> NSDictionary

        NSData *JSONData =[recvData dataUsingEncoding:NSUTF8StringEncoding];

        NSDictionary *responseJSON =[NSJSONSerialization JSONObjectWithData:JSONData options:NSJSONReadingMutableLeaves error:nil];

        if([[responseJSON objectForKey:@"code"]isEqualToString:@"200"]){

            //需要执行的操作

        }

    }

    打完全局断点程序会显示崩溃在:

    if(delegate &&[delegate respondsToSelector:didStartSelector]){

    [delegate performSelector:didStartSelector withObject:self];

    }

    这就很尴尬了,ASI这个库已经不维护太久了,但是项目用的这个库我又不得不去看,而且自己水平太菜搞不太清楚核心问题出在哪,只能判断出问题是出于delegata的。经过一番查找资料,终于找到了一种解决方案。把delegata删除掉,换一种方式来接收返回结果。代码如下:

    [request setCompletionBlock :^{

            //请求响应结束,返回responseString

            NSString *recvData =[requestresponseString];//NSData *responseData =[request responseData];

            NSLog(@"%@",recvData);

            NSData *JSONData =[recvData dataUsingEncoding:NSUTF8StringEncoding];

            NSDictionary *responseJSON =[NSJSONSerialization JSONObjectWithData:JSONData options:NSJSONReadingMutableLeaves error:nil];

            if([[responseJSON objectForKey:@"code"]isEqualToString:@"200"]){

              //需要执行的操作

            }

        }];

        [request setFailedBlock :^{

            //请求响应失败,返回错误信息

            NSError *error =[requesterror];

            NSLog(@"error:%@",[error userInfo]);

        }];

    然后就顺利的跑过了,谢谢这篇古老的帖子(贴在最下边咯)。

    古老的帖子(参考文档):https://www.2cto.com/kf/201303/195374.html

    相关文章

      网友评论

          本文标题:使用ASI库调用delegata报错thread 1:exc_b

          本文链接:https://www.haomeiwen.com/subject/hwqhkftx.html