Asihttprequest постоянно принимает нулевые значения

#iphone #objective-c #asihttprequest

#iPhone #objective-c #asihttprequest

Вопрос:

я работаю над приложением для обмена сообщениями, в котором все сообщения временно хранятся на сервере. у меня есть следующий код.

 NSURL *url = [NSURL URLWithString:[BARAppDelegate returnsendmessageurl]];
ASIFormDataRequest  *request1 = [ASIFormDataRequest requestWithURL:url];
[request1 setPostValue:usernameEmailid forKey:@"username"];
[request1 setPostValue:messagebody forKey:@"MessageBody"];
[request1 setPostValue:receipientnumber forKey:@"RecipientMobileNumber"];
[request1 setPostValue:sendermobilenumber forKey:@"SenderMobileNumber"];
[request1 addData:nil withFileName:@"ipodfile.jpg" andContentType:@"application/octet-stream" forKey:@"photos"];
[request1 setDelegate:self];
[request1 setPersistentConnectionTimeoutSeconds:30];
[request1 setShouldAttemptPersistentConnection:YES];
[request1 startAsynchronous];
  

когда я проверяю базу данных на сервере, на удивление, она приняла только нулевые значения для всех параметров (usernameEmailid, messagebody,receipientnumber,sendermobilenumber). я записал все эти значения непосредственно перед отправкой запроса, и, похоже, с ними все в порядке.

ПРИМЕЧАНИЕ: это происходит не всегда. это происходит несколько раз. Также это происходит только тогда, когда я пытаюсь ответить на существующее сообщение, которое у меня есть во входящих. этого не происходит, когда я пытаюсь отправить новое сообщение.

я делаю что-то не так здесь?

Ответ №1:

Вы используете асинхронное соединение и, чтобы иметь возможность знать, пошло ли что-то не так на вашей стороне или на стороне сервера, вы должны реализовать следующие методы перед вызовом

 [request1 startAsynchronous];
  

Добавьте это:

     [request1 setDidFinishSelector:@selector(uploadRequestFinished:)];
    [request1 setDidFailSelector:@selector(uploadRequestFailed:)];
  

И реализуйте эти методы:

 - (void)uploadRequestFinished:(ASIHTTPRequest *)request{    
    NSData *responseData = [request responseData];

    // Store incoming data into a string
    NSString *response = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];

    NSLog(@"Server response:%@", response);
}

- (void)uploadRequestFailed:(ASIHTTPRequest *)request{

     NSLog(@"[TWDEBUG] Error - upload failed: "%@"",[[request error] localizedDescription]);
}
  

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

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

2. Поскольку проблема возникает после того, как вы отвечаете на сообщение, может быть, вы измените свои значения и присвоите им nil? Возможно ли это? или, может быть, вы не подключили свою форму ответа в IB и, таким образом, получаете нулевые значения, когда запрашиваете их.