Сбой второго вызова iOS xcode, веб-служб, NSURLConnection

#ios #xcode #service #web

#iOS #xcode #Обслуживание #веб

Вопрос:

Разработка для iPad, iOS 4.3, objective-c, xcode 4.1.

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

Метод в моем классе, «runMethod::», открывает NSURLConnection и выполняет вызов асинхронно, с самим классом-оболочкой в качестве делегата NSURLConnection.

Я где-то читал, что в Android есть ошибка, которая сохраняет пул подключений. При попытке установить соединение во второй раз происходит сбой, потому что предыдущее соединение оставалось открытым, несмотря на то, что код закрывал его. Следовательно, я подозреваю, что проблема в том, что соединение остается в пуле, и когда я пытаюсь создать другое, оно сталкивается? Может быть, у xcode аналогичная проблема?

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

При необходимости я могу предоставить полный класс-оболочку, но у кого-нибудь есть идеи?

Комментарии:

1. Является ли ваша оболочка одноэлементным классом? Создаете ли вы NSURLConnection для каждого запроса? Возможно, какой-то код поможет, да 🙂

2. Извините, вчера я потратил целую вечность на копирование длинного класса-оболочки в статью, а затем все это потерялось, когда я опубликовал.

3. … и чтобы ответить на ваш другой вопрос, я не уверен, что такое одноэлементный класс. Да, я создаю NSURLConnection при каждом вызове и после асинхронного ответа закрываю его.

4. (Я продолжаю нажимать Return, чтобы начать новую строку, и проклятый комментарий публикуется непреднамеренно)… Создание NSURLConnection запускает асинхронный вызов, поэтому я каждый раз воссоздаю соединение. Возможно, мне следует создать переменную класса и проверить, был ли создан ее экземпляр? Если это так, я мог бы запустить какой-нибудь метод для отправки другого вызова?

5. Вы имели в виду iOS4.3 и Xcode4? Потому что я считаю, что вы все отменили.

Ответ №1:

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