【问题标题】:Switch IPAD to IPAD AIR Error Thread 1: EXC_BAD_ACCESS (code=1, address=0x384e344432212301)将 IPAD 切换到 IPAD AIR 错误线程 1: EXC_BAD_ACCESS (code=1, address=0x384e344432212301)
【发布时间】:2015-12-03 14:52:16
【问题描述】:

我绝望了,
我有一个在 IPAD、IPAD 2 甚至 IPAD Air 模拟器上运行良好的 IOS 应用程序,但尝试在 IPAD AIR 设备上运行此应用程序时,应用程序在发出 HTTPS 请求并获取一些数据时崩溃。 对于 HTTPS 请求,我使用 AFNetworking 框架。 有没有人有类似问题的想法或经验? 我已经阅读了很多关于 stackoverflow 的文章,并试图寻找僵尸,但没有找到。

- (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() 的裸用发出警告。
  • 我是这个项目的新手,有很多警告。无法花时间修复每个警告:/
  • 沉没成本谬误。 :) 随着时间的推移,我保证你会浪费更多的时间试图通过警告来寻找有意义的新警告,而不是花费时间修复它们。不过,我完全同情你在这方面的立场。

标签: ios objective-c ipad afnetworking


【解决方案1】:

为什么要使用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];
}

【讨论】:

  • 非常感谢它解决了我的问题,但我仍然看不出有什么大的不同。而且我不明白为什么它在旧的 iPad 1+2 上运行良好,但在 iPad AIR 上崩溃了??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-10
  • 2014-09-19
  • 1970-01-01
  • 1970-01-01
  • 2020-12-06
相关资源
最近更新 更多