【发布时间】:2011-06-08 12:45:17
【问题描述】:
我正在尝试从服务器下载文件。我的代码如下。在 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];
直到控制超出 ASIHTTPRequestDelegate 的 requestFinished 方法。在我的情况下,发生的事情是控件同时在 requestFinished 及以下执行代码
[ContentBO downloadFile:destPath content_name:content_data_file_name];
但我不希望控件在退出 requestFinished 方法之前低于 [ContentBO downloadFile...]。
【问题讨论】:
标签: objective-c download asihttprequest