Я пытаюсь загрузить файл с сервера.Мой код следующий.В методе didFinishLaunchingWithOptions я создаю новый поток, используя detachNewThreadSelector, который выполняет следующий код.
NSString *destPath = [self.home_dir_path stringByAppendingPathComponent:[NSString stringWithFormat:@"_%@",content_data_file_name]];
[ContentBO downloadFile:destPath content_name:content_data_file_name];
if([self updatesAvailable]){
//update content
}else{
//launch app
}
Мой код для загрузки файла:
@try{
NSString *url = [NSString stringWithFormat:@"%@/%@",ServerURL,content_name];
NSLog(@"downloading URL is: %@",url);
self.request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:[url stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]]];
[self.request setRequestMethod:@"GET"];
[self.request setDownloadDestinationPath:destFilePath];
NSLog(@"destination path is: %@",destFilePath);
[self.request setTimeOutSeconds:30];
[self.request setDelegate:self];
[self.request startSynchronous];
NSError *error = [self.request error];
NSData *receivedData = nil;
if (!error) {
isSuccess = YES;
self.responseStr = [request responseString];
receivedData = [NSData dataWithData:[self.request responseData]];
}
else {
isSuccess = NO;
NSLog(@"The following error occurred: %@", error);
}
}@catch(NSException *e){
NSLog(@"exception occured.");
}
Что я понимаю в синхронном вызове, так это то, что это блокирующий вызов, и управление не должно опускаться ниже
[ContentBO downloadFile:destPath content_name:content_data_file_name];
до тех пор, пока элемент управления не выйдет из метода requestFinished в ASIHTTPRequestDelegate.В моем случае происходит следующее: элемент управления одновременно выполняет код в requestFinished и ниже
[ContentBO downloadFile:destPath content_name:content_data_file_name];
Но я не хочу, чтобы элемент управления опускался ниже [ContentBO downloadFile ...] до выхода из метода requestFinished.