Мне нужно загрузить изображение в webservice. Ниже приведен фрагмент кода, который я вернул для загрузки изображения. Размер изображения очень большой (около 6 Мб). Я загружаю это изображение в фоновый поток с помощью 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;
}
теперь проблема я столкнулся это, если я пытаюсь загрузить изображение в фоновом потоке запрос не собирается на сервер (Я проверяю файл журнала на сервере). но если я загружу изображение в главной теме, запрос будет на сервере (только для целей тестирования я знаю, что его не очень хорошая идея загружать большие изображения в основной поток). Так что я делаю неправильно здесь? есть ли проблема с Background Threading? Plz Помогите мне. Заранее спасибо.
если я загрузить изображение, как, как вы сказали, привычка это может вызвать мой пользовательский интерфейс, чтобы блокировать на некоторое время? – RockandRoll