将 IPAD 切换为 IPAD AIR 错误线程 1:EXC_BAD_ACCESS(代码=1,地址=0x384e344432212301)
Switch IPAD to IPAD AIR Error Thread 1: EXC_BAD_ACCESS (code=1, address=0x384e344432212301)
我很绝望,
我有一个 IOS 应用程序 运行 在 IPAD、IPAD 2 甚至 IPAD 空气模拟器上运行良好,但试图 运行 IPAD AIR 设备上的此应用程序在发出 HTTPS 请求和获取一些数据时应用程序崩溃。
对于 HTTPS 请求,我使用 AFNetworking 框架。
有没有人有类似问题的想法或经验?
我已经阅读了很多关于 Whosebug 的文章,并试图寻找僵尸,但没有找到。
- (void) executeRequestType:(RequestType)type_
requestMethod:(RequestMethod)method_
layout:(NSString *)layout_
action:(NSString *)action_
parameters:(NSDictionary *)params_
successBlock:(SuccessBlock)success_ {
_status = RequestStatusInitate;
//NSLog(@"%@ - %@ - %@", layout_, params_, action_);
NSString *parmstr = @"";
if (params_) {
parmstr = [self parmeterStringFromDictionary:params_];
}
NSString *strURL = [NSString stringWithFormat:@"%@fmi/xml/fmresultset.xml?-db=%@&-lay=%@%@&%@",SERVER_URL,DB_NAME, layout_, parmstr, action_];
NSLog(@"request str %@", strURL);
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
NSURL *url = [NSURL URLWithString:strURL];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
if (method_ == RequestMethodDelete) {
[request setHTTPMethod:@"DELETE"];
}
AFXMLRequestOperation *operation = [AFXMLRequestOperation
XMLParserRequestOperationWithRequest:request
success:^(NSURLRequest *request, NSHTTPURLResponse *response, NSXMLParser *XMLParser) {
NSLog(@"%li",(long)response.statusCode);
NSObject *object = success_(XMLParser);
NSString *requestType = [NSString stringWithFormat:@"%d", type_];
NSDictionary *responseDict;
responseDict = @{ DATA: object,
REQUEST_TYPE: requestType};
_status = RequestStatusCompleted;
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
objc_msgSend(_delegate, @selector(callerDidFinishLoading:receivedObject:), self, responseDict);
//Trying to call "callerDidFinishLoading" EXC_BAD_ACCESS is Thrown
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, NSXMLParser *XMLParser) {
_status = RequestStatusCompleted;
NSLog(@"%@",error);
objc_msgSend(_delegate, @selector(caller:didFailWithError:), self, error);
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}];
[operation start];
_status = RequestStatusInProgress;
}
为什么要使用 objc_msgSend
调用委托方法?
您需要更改:
objc_msgSend(_delegate, @selector(callerDidFinishLoading:receivedObject:), self, responseDict);
至:
[_delegate callerDidFinishLoading:self receivedObject:responseDict];
如果它是一个选项委托方法那么做:
if ([_delegate respondsToSelector:@selector(callerDidFinishLoading:receivedObject:)]) {
[_delegate callerDidFinishLoading:self receivedObject:responseDict];
}
我很绝望,
我有一个 IOS 应用程序 运行 在 IPAD、IPAD 2 甚至 IPAD 空气模拟器上运行良好,但试图 运行 IPAD AIR 设备上的此应用程序在发出 HTTPS 请求和获取一些数据时应用程序崩溃。
对于 HTTPS 请求,我使用 AFNetworking 框架。
有没有人有类似问题的想法或经验?
我已经阅读了很多关于 Whosebug 的文章,并试图寻找僵尸,但没有找到。
- (void) executeRequestType:(RequestType)type_
requestMethod:(RequestMethod)method_
layout:(NSString *)layout_
action:(NSString *)action_
parameters:(NSDictionary *)params_
successBlock:(SuccessBlock)success_ {
_status = RequestStatusInitate;
//NSLog(@"%@ - %@ - %@", layout_, params_, action_);
NSString *parmstr = @"";
if (params_) {
parmstr = [self parmeterStringFromDictionary:params_];
}
NSString *strURL = [NSString stringWithFormat:@"%@fmi/xml/fmresultset.xml?-db=%@&-lay=%@%@&%@",SERVER_URL,DB_NAME, layout_, parmstr, action_];
NSLog(@"request str %@", strURL);
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
NSURL *url = [NSURL URLWithString:strURL];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
if (method_ == RequestMethodDelete) {
[request setHTTPMethod:@"DELETE"];
}
AFXMLRequestOperation *operation = [AFXMLRequestOperation
XMLParserRequestOperationWithRequest:request
success:^(NSURLRequest *request, NSHTTPURLResponse *response, NSXMLParser *XMLParser) {
NSLog(@"%li",(long)response.statusCode);
NSObject *object = success_(XMLParser);
NSString *requestType = [NSString stringWithFormat:@"%d", type_];
NSDictionary *responseDict;
responseDict = @{ DATA: object,
REQUEST_TYPE: requestType};
_status = RequestStatusCompleted;
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
objc_msgSend(_delegate, @selector(callerDidFinishLoading:receivedObject:), self, responseDict);
//Trying to call "callerDidFinishLoading" EXC_BAD_ACCESS is Thrown
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, NSXMLParser *XMLParser) {
_status = RequestStatusCompleted;
NSLog(@"%@",error);
objc_msgSend(_delegate, @selector(caller:didFailWithError:), self, error);
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}];
[operation start];
_status = RequestStatusInProgress;
}
为什么要使用 objc_msgSend
调用委托方法?
您需要更改:
objc_msgSend(_delegate, @selector(callerDidFinishLoading:receivedObject:), self, responseDict);
至:
[_delegate callerDidFinishLoading:self receivedObject:responseDict];
如果它是一个选项委托方法那么做:
if ([_delegate respondsToSelector:@selector(callerDidFinishLoading:receivedObject:)]) {
[_delegate callerDidFinishLoading:self receivedObject:responseDict];
}