0

Image To webservice をアップロードする必要があります。以下は、画像をアップロードするために返されたコード スニペットです。画像サイズが非常に大きい (約 6Mb)。GCDを使用してバックグラウンドスレッドにその画像をアップロードしています。

       if([VSCore ConnectedToInternet ])
       {
         bgTask = [[UIApplication sharedApplication]beginBackgroundTaskWithExpirationHandler: ^{
                            dispatch_async(dispatch_get_main_queue(), ^{
                                //[application endBackgroundTask:self->bgTask];
                                //self->bgTask = UIBackgroundTaskInvalid;
                            });
                        }];

                        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

                            [vrs write:data toURI:URI];

                           [[UIApplication sharedApplication]endBackgroundTask:bgTask];
                             bgTask = UIBackgroundTaskInvalid;
                        });

//
}

-(BOOL)write:(NSData *)data toURI:(NSString *)URI
{
BOOL retVal = NO;
NSString* requestDataLengthString = [[NSString alloc] initWithFormat:@"%d", [data length]];

NSRange range = [URI rangeOfString:@"http"];//Is http?  
if(range.location != NSNotFound) 
{   
    //Yes, http
    NSMutableURLRequest *httpRequest = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:URI]];

    [httpRequest setHTTPMethod:@"POST"];
    [httpRequest setHTTPBody:data];
    [httpRequest setValue:@"application/xml" forHTTPHeaderField:@"Content-Type"];
    [httpRequest setValue:requestDataLengthString forHTTPHeaderField:@"Content-Length"];

    NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:httpRequest delegate:self];

    [theConnection release];
    [httpRequest release];

    if (theConnection) 
    {
        receivedData=[[NSMutableData data] retain];
        retVal = YES;
    } 
    else 
    {                                            
        NSError *error = [NSError alloc];
        NSLog(@"Connection failed! Error - %@ %@",
            [error localizedDescription],
            [[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]);
            [error release];

        retVal = NO;
    }

}                                            
return retVal;  

}

今私が直面している問題は、バックグラウンドスレッドで画像をアップロードしようとすると、リクエストがサーバーに送信されないことです(サーバー上のログファイルを確認しています)。しかし、メインスレッドに画像をアップロードすると、リクエストはサーバーに送信されます(テスト目的のためだけに、メインスレッドに大きな画像をアップロードすることはお勧めできません)。だから私はここで間違っているのですか?バックグラウンドスレッドに問題はありますか? 助けてください。前もって感謝します。

4

1 に答える 1