#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 и, таким образом, получаете нулевые значения, когда запрашиваете их.