2012-04-25 4 views
0

В настоящее время я работаю над приложением iOS, где вы можете взять изображение и загрузить его на сервер.XCode Отправка изображения на сервер

У меня это работает отлично в тренажерах, однако при тестировании на устройстве я получаю предупреждение о принятой памяти, а затем он падает.

Существует довольно немного больше в моем коде, я просто пытаюсь показать биты, которые имеют отношение к моей проблеме:

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

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
    { 
     UIImage *image=[info objectForKey:@"UIImagePickerControllerOriginalImage"]; 
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDirectory = [paths objectAtIndex:0]; 
     NSString* path = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithString: "name.jpg"] ]; 
     NSData* data = UIImageJPEGRepresentation(image,1.0); 
     [data writeToFile:path atomically:YES]; 
    } 

на экране оплаты у меня есть этот код, чтобы отправить его на сервер и скрипт PHP отправляет службу PayPal:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString* path = [documentsDirectory stringByAppendingPathComponent: [NSString stringWithString: @"name.jpg"] ]; 

    NSData *imageData = UIImageJPEGRepresentation([UIImage imageWithContentsOfFile:path]); 


    NSString *urlString = @"http://server.com/payment.php?"; 
    NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 
    [request setURL:[NSURL URLWithString:urlString]]; 
    [request setHTTPMethod:@"POST"]; 

    NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"]; 
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]; 
    [request addValue:contentType forHTTPHeaderField:@"Content-Type"]; 

    NSMutableData *body = [NSMutableData data]; 

    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"backfile\"; filename=\"back.jpg\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithString:@"Content-Type: image/jpeg\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[NSData dataWithData:imageData]]; 
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

    [webView loadRequest:request]; 


    [self.view addSubview:webView]; 
    [request setHTTPBody:body]; 

Извините, если это не слишком ясно, пожалуйста, дайте мне знать. Он отправляет изображения на сервер, но приложение будет аварийно завершено. Я попытался изменить размер изображений, но мне они нужны при наилучшем качестве. Если я отправить масштабируется вниз изображения с помощью:

UIGraphicsBeginImageContext(frontSize); 
    [frontimg drawInRect:CGRectMake(0,0,242,444)]; 
    UIImage* realfrontImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    NSData *frontImageData = UIImageJPEGRepresentation(image, 1.0); 

Он работает, однако качество изображения 72ppi, когда мне нужно это около 300

Любая помощь будет оценена.

ответ

0

Это необычное использование веб-представления, чтобы сделать сообщение. Возможно, веб-просмотр (или что-то еще существенное) становится выпущенным в память предупреждения. Можете ли вы заменить его этим и посмотреть, помогает ли это?

NSOperationQueue *queue = [[NSOperationQueue alloc] init]; 

[NSURLConnection request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) 
{ 
    NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response; 
    NSLog(@"got response %d, data = %@, error = %@", [httpResponse statusCode], data, error); 
}]; 
+0

Мое решение вокруг этого ответа. Я должен загружать оба изображения в отдельные сообщения, а затем загружать веб-представление, все еще имея проблемы с размером изображения, он занимает много времени. – chrisw

0

Добавить отладочное сообщение NSLog всех ваших UIViewControllers didReceiveMemoryWarning методы и методы viewWillUnload, чтобы увидеть, если ваши UIViewControllers выпускают объекты, которые вы полагаетесь на.