将 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];
}