错误EXC_BAD_ACCESS(代码1,地址= 0xcc)
问题描述:
我已经跳入iPhone应用程序项目。错误EXC_BAD_ACCESS(代码1,地址= 0xcc)
- (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返回正确的数据。 我也试过启用僵尸对象。
我是swift和iOS开发的新手,有人请指导下一步应该检查什么。
答
我只通过调试源代码并重新分析我的逻辑来解决此问题。
下面是一些参考,帮助我很多。
EXC_BAD_ACCESS表示消息已发送到内存中没有类的实例执行的点。因此“访问不良”。
您将3例获得EXC_BAD_ACCESS:
- 的对象没有初始化
- 的对象已经释放
- 别的东西,不太可能发生
这已经是一个很好的起点。开始使用调试器,如果您最近向正在处理的类中添加了新对象,则在首次使用新添加的对象之前在该行中放置断点并检查调试器中的值。
发生了什么最多的事情是,您将发送消息给一个过度发布的对象 - 即从调用堆栈中消失的对象。在这种情况下,你将在控制台中得到的所有东西(甚至是所有东西)将会是:EXC_BAD_ACCESS
这是因为对象不见了,没有信息它是什么类,什么源文件或其他东西。
这是Objective-C代码,而不是Swift代码。我编辑了标签以帮助您找到合适的观众。 – jjs
您是否尝试过创建异常断点?此代码可能不是问题发生的地方 – Tj3n
我该怎么做? –