У меня есть настройка, в которой я использую ASIHttpRequest для вызова службы в фоновом подклассе NSOperation. Я вызываю метод из моего main() в NSOperation и прохожу этот метод и строю свой запрос с соответствующим URL, заголовками, телом и т. Д. Проблема в том, что я иногда вижу, что тело запроса установлено в null вместо ожидаемое значение. Я распечатываю, что ожидаемое тело должно быть правильно, прежде чем устанавливать его в запрос, и это представление НЕ равно нулю, поэтому я не знаю, где/как будет высвобождаться тело запроса для ASIHttpRequest.Тело сообщения ASIHttpRequest имеет значение null, иногда при создании через NSOperation
Вот пример кода того, как я устанавливаю тело запроса ... этот метод вызывается другим методом драйвера, который контролирует весь рабочий процесс сети. Этот метод, в свою очередь, вызывается методом main() моего NSOperation.
+ (ASIHTTPRequest*) buildRequestForProjectModify: (ANVideoProject*) theProject {
if (theProject.selfUrl == nil) return nil; //Can't do anything if we don't have a project url.
NSString* projectPutUrl = theProject.selfUrl;
ASIFormDataRequest* request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:projectPutUrl]];
[ANAppsServiceHelper addStandardHeadersToRequest:request];
NSDictionary* projectDict = [theProject jsonFriendlyForSaveAndPreview];
ANLogInfo(@"\n\nProject Post body: \n%@\n\n", projectDict); //This will print out ok
ANLogInfo(@"\n\nProject Post Body as JSON\n%@\n\n", [projectDict JSONRepresentation]); //this too prints out ok.
NSString* jsonRep = [projectDict JSONRepresentation];
NSData* pd = [jsonRep dataUsingEncoding:NSUTF8StringEncoding];
[request appendPostData:pd];
[request setRequestMethod:@"PUT"];
return request; //I have a problem in the calling method from here where the request body is now null.
}
Я читал вокруг о создании autorelease бассейна в главном методе моего NSOperation подкласса, и поэтому я делаю, что в верхней части основного метода. Когда я это сделал, возникновение (null) для тела запроса было смягчено, но все же произошло примерно 1/4 времени, когда я вызывал эту операцию. Странно то, что ни одна другая часть запроса никогда не получает нулевой случайным образом (т. Е. Метод запроса или заголовки). Вот выход журнала из метода драйвера я упоминаю выше распечатывания запрос, который был возвращен:
Here is Modify the request: https://<service-url>/projects/p0FvVjc790MFWduhhqUStA
Here is the request headers: {
Accept = "application/json";
"Accept-Encoding" = gzip;
Authorization = "Bearer <key>";
"Content-Length" = 293;
"Content-Type" = "application/json";
"User-Agent" = "iPhone (OS 4.3.2)";
}
Here is the request method: PUT
Here is the request body: (null)
Update:
Так одна вещь, которую я заметил, что иногда тело запроса является недействительным и также иногда есть некоторые данные мусора, добавленные к концу тела запроса (а иногда тело запроса полностью прекрасное). Еще более странно, что запрос действительно проходит успешно с телом, который я намеревался добавить (даже если распечатка выглядит плохо). Это говорит о том, что все в порядке в ASIHttpRequest, но, возможно, что-то происходит с тем, как я печатаю состояние моего запроса или какую-то другую проблему между ASIHttpRequest и библиотекой SBJSon, которую я использую, что заставляет запрос выглядеть поврежденным со временем (хотя это, по-видимому, нет).
Размер не большой .. никаких изображений или всего лишь несколько строк текста. – Faisal