0

私は現在、画像を取得してサーバーにアップロードできる iOS アプリケーションに取り組んでいます。

これはシミュレーターで正常に動作していますが、デバイスでテストすると、受信したメモリ警告が表示され、クラッシュします。

私のコードにはかなり多くのものがあります。私の問題に関連するビットを表示しようとします:

デバイスのフォト ピッカーを使用して撮影した 2 つの画像を送信しようとしています。これは電話に保存され、支払い画面に渡されます。

 - (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 スクリプトはペイパル サービスを送り返します。

   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);

それは機能しますが、300前後で必要なときの画質は72PPIです.

どんな助けでも大歓迎です。

4

2 に答える 2

0

NSLog デバッグ メッセージをすべての UIViewControllers didReceiveMemoryWarning メソッドと viewWillUnload メソッドに追加して、UIViewControllers が依存しているオブジェクトを解放しているかどうかを確認します。

于 2012-04-25T19:13:49.893 に答える
0

投稿を行うための webview の異常な使用です。webview (またはその他の重要なもの) がメモリ警告で解放されている可能性があります。これに置き換えて、それが役立つかどうかを確認できますか?

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);
}];
于 2012-04-25T18:55:09.803 に答える