本帖最后由 wolf_y 于 2014-10-28 16:57:49 编辑

解决方案 »

  1.   

    原因很明显,receivedData 为nil 而导致的异常。那就找找为什么会是nil ? 
    假设在
    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
    中 返回的data 没有值,在使用data.length 在判断的时候有可能会因不满足条件而无法进入判断的语句体,也就无法执行这句代码:
    receivedData = [NSMutableData dataWithData:data];
    来对receivedData 进行实例。也就是receivedData 的值为空nil 
    当执行到代理方法
    - (void)connectionDidFinishLoading:(NSURLConnection *)connection 
    时,在判断 if (receivedData.length==0) 时因receivedData为nil,而导致程序的异常正确的做法:
    在外部定义并预先实例化好receivedData对象 
      

  2.   

    调试didReceiveData方法中确实有值,receivedData接受以后的长度1024,这个方法每次都正常,而且断点只进入了一次。
    但是一到connectionDidFinishLoading方法,receivedData就不正常了。
    在外部定义receivedData是这样的,NSMutableData *receivedData ;
    那到底什么时候receivedData这个指针变为空了呢?
    难道其实不是同一个线程?
      

  3.   

    调试didReceiveData方法中确实有值,receivedData接受以后的长度1024,这个方法每次都正常,而且断点只进入了一次。
    但是一到connectionDidFinishLoading方法,receivedData就不正常了。
    在外部定义receivedData是这样的,NSMutableData *receivedData ;
    那到底什么时候receivedData这个指针变为空了呢?
    难道其实不是同一个线程?
    难道receivedData被提前释放了? 使用
    [NSMutableData dataWithData:data]; 静态方法创建实例,它应该是一个autorelease 的对象,说不好在某一时刻被清理。所以你可以尝试将receivedData声明为属性,来帮助你来管理内存。
      

  4.   

    调试didReceiveData方法中确实有值,receivedData接受以后的长度1024,这个方法每次都正常,而且断点只进入了一次。
    但是一到connectionDidFinishLoading方法,receivedData就不正常了。
    在外部定义receivedData是这样的,NSMutableData *receivedData ;
    那到底什么时候receivedData这个指针变为空了呢?
    难道其实不是同一个线程?
    难道receivedData被提前释放了? 使用
    [NSMutableData dataWithData:data]; 静态方法创建实例,它应该是一个autorelease 的对象,说不好在某一时刻被清理。所以你可以尝试将receivedData声明为属性,来帮助你来管理内存。
    先谢谢了!终于有写思路了,我对这个文件加了-fno-objc-arc,禁用了arc,
    调试发现receivedData这个在connectionDidFinishLoading中是0 object.应该确实是提前被释放了。
    为什么禁用了arc,这个还是被提前清理了呢?
      

  5.   


    上传一张receivedData的图片。