错误EXC_BAD_ACCESS(代码1,地址= 0xcc)

时间:2016-11-16 11:17:15

标签: ios objective-c

我已经进入了一个iPhone应用程序项目。

- (NSURLSessionDataTask *)GET:(NSString *)URLString
                   parameters:(NSDictionary *)parameters
                      success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
                      failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
{
    NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:@"GET" URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters error:nil];

// Below line throws error EXC_BAD_ACCESS (Code 1, address=0xcc)

    __block NSURLSessionDataTask *task = [self dataTaskWithRequest:request completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) {
        if (error) {
            if (failure) {
                failure(task, error);
            }
        } else {
            if (success) {
                success(task, responseObject);
            }
        }
    }];

    [task resume];

    return task;
}

我检查过api返回正确的数据。 我也试过了Enable Zombie Objects。

我是swift的新手,iOS开发人员可以指导我接下来要检查的内容。

1 个答案:

答案 0 :(得分:0)

我只是通过调试源代码并重新分析我的逻辑来解决这个问题。

以下是一些帮助我很多的参考资料。

EXC_BAD_ACCESS表示消息被发送到内存中没有类的实例来执行它的点。因此“糟糕的访问”。

您将在3种情况下获得EXC_BAD_ACCESS:

  1. 未初始化对象
  2. 对象已经发布
  3. 其他不太可能发生的事情
  4. 这已经是一个很好的起点。开始使用调试器,如果你最近在你正在处理的类中添加了一个新对象,那么在第一次使用刚添加的对象之前在该行放置一个断点并检查调试器中的值。

    发生的最多的事情是你将向一个过度发布的对象发送消息 - 即从调用堆栈中消失的对象。在这种情况下,您将在控制台中获得的所有内容(实际上是所有内容)将只是:EXC_BAD_ACCESS

    这是因为对象消失了,没有信息是什么类,或者是什么源文件或其他什么。