NSURLSessionDataTask, dataTaskWithRequest: завершение проблемы с обработчиком в IOS12 - PullRequest
0 голосов
/ 24 октября 2018

В моем приложении Objective-C для iPhone, которое я успешно использовал NSURLSession, мое приложение начало аварийно завершать работу с ошибкой, показанной в iOS 12 ниже:

Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: '- [NSConcreteMapTable dataTaskWithRequest: completeHandler:]: нераспознанный селектор, отправленный в экземпляр

Извлечение токена ==>

+ (NSURLSession *)sharedSessionManager
{
    static NSURLSession *session = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
    NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
    [sessionConfiguration setHTTPAdditionalHeaders:@{
                                                  @"Accept": @"application/json"
                                                  }
         ];
session = [NSURLSession sessionWithConfiguration:sessionConfiguration delegate:nil delegateQueue:nil];
    });
    return session;
}

Получение сохраненного токена для всех будущих вызовов ==>

+ (NSURLSession *)sharedAsyncSessionManager
{
    NSString *authToken = [NSString stringWithFormat: @"Bearer %@", m_strToken];
    static NSURLSession *session = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
    NSURLSessionConfiguration *sessionConfiguration =[NSURLSessionConfiguration defaultSessionConfiguration];
    [sessionConfiguration setHTTPAdditionalHeaders:@{
                                                         @"Content-Type": @"application/json",
                                                         @"Authorization": authToken}
         ];
        session = [NSURLSession sessionWithConfiguration:sessionConfiguration delegate:nil delegateQueue:nil];
    });
    return session;
}

Вызов API ==>

NSURLSession *sessionMnger = [SessionManager sharedAsyncSessionManager];

NSURLSessionDataTask *task = [sessionMnger dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
  {
      NSMutableArray *arrTemp = [[NSMutableArray alloc]init];
  }

Приложение аварийно завершает работу для dataTaskWithRequest в IOS 12. Сообщение об ошибке я могу прочитать, как показано ниже:

Завершение приложения из-занеобработанное исключение 'NSInvalidArgumentException', причина: '- [NSConcreteMapTable dataTaskWithRequest: завершениеHandler:]: нераспознанный селектор, отправленный экземпляру

, когда я когда-либо хотел вызвать API с сбоем приложения sessionMnger ....

чего-то не хватает в iOS 12?

1 Ответ

0 голосов
/ 24 октября 2018

Обычно, когда вы получаете сообщение об ошибке «нераспознанный селектор отправлен в экземпляр» с несвязанным именем класса (в данном случае NSConcreteMapTable), это сигнализирует о проблеме с управлением памятью.Скорее всего, исходный объект уже освобожден, память повреждена, а время выполнения сбито с толку.

Чтобы выполнить диагностику, попробуйте включить «Объекты-зомби» из меню «Схема», что должно помочь определить причину сбоя.Ищите подсказки, почему может происходить повреждение памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...