Я вхожу в приложение iOS7, это своего рода приложение для социальной сети с сообщениями с изображениями и бэкэнд, которые сохраняют все данные, отправленные клиентом. Клиент iOS отправляет информацию о сообщении через json и после отправки информации начинает отправлять изображение через многостраничную форму, используя AFNetworking
.Ожидание отправки многостраничного изображения завершено
Мне нужно уведомить, когда изображение будет отправлено, так что я могу обновить основной вид приложения с новыми сообщениями, включая недавно опубликованные клиентом. В практике, если я запрашиваю бэкэнд для последних сообщений, а multipart еще не закончен, отправка изображения прерывается и не удается отправить изображение.
Бэкэнд разрабатывается в WCF
и является веб-сервисом RESTful JSON.
Вот метод, который отправляет сообщение в бэкэндом:
+(void)addPostToServerAddtext:(NSString *)text addimage:(UIImage *)image addbeach:(NSString *)beach location:(NSString*)location;
{
NSLog(@"entro a addPost");
NSString *urlBackend = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"URLBackend"];
NSData* dataImage = UIImageJPEGRepresentation(image, 1.0);
NSString* ImageName = [NSString stringWithFormat:@"%@_%@.jpg",idUser ,dateToServer];
NSString *jsonRequest = [NSString stringWithFormat:@"{\"Date\":\"%@\"...."];
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@newPost",urlBackend]];
NSMutableURLRequest *request = [ [NSMutableURLRequest alloc] initWithURL:url];
NSData *requestData = [NSData dataWithBytes:[jsonRequest UTF8String] length:[jsonRequest length]];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:requestData];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[connection start];
if (image != nil) {
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager POST:[NSString stringWithFormat:@"%@FileUpload",urlBackend]
parameters:nil
constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:dataImage name:@"image" fileName:ImageName mimeType:@"image/jpg" ];
}
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Success: %@", responseObject);
}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
}
}
И использование блока успеха не работает? – Wain
Хорошая точка, но этот метод находится в модели моего MVC architechture, и я хочу быть замеченным в контроллере главной страницы ... – jandresrodriguez
@Wain Я думаю, что проблема в том, что у него есть [другой вопрос] (http: //stackoverflow.com/questions/20072609/update-property-using-geocoder-to-get-user-actual-address-exc-bad-access), в котором он выдает запрос, и неясно, как подождать он (и пробовал только ждать пять секунд). Я думаю, он ищет указания о том, как получить метод, который вызывает «addPostToServerAddtext», когда запрос завершен. – Rob