一連の zip ファイルをダウンロードするアプリケーションを開発しています。
正常に動作しますが、時々クラッシュし、プロジェクト ナビゲーターに次のエラーが表示されます。
Thread 5 WebThread: EXC_??? (11)(code=0,subcode=0x0)
何か案は?ASIHTTPRequest
ファイルのダウンロードに使用しています。
一連の zip ファイルをダウンロードするアプリケーションを開発しています。
正常に動作しますが、時々クラッシュし、プロジェクト ナビゲーターに次のエラーが表示されます。
Thread 5 WebThread: EXC_??? (11)(code=0,subcode=0x0)
何か案は?ASIHTTPRequest
ファイルのダウンロードに使用しています。
詳細について例外を追跡できますか?
main.m を次のコードに置き換えます。
int main(int argc, char *argv[])
{
@autoreleasepool {
int retVal = -1;
@try {
retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([FRAppDelegate class]));
}
@catch (NSException* exception) {
NSLog(@"Uncaught exception: %@", exception.description);
NSLog(@"Stack trace: %@", [exception callStackSymbols]);
}
return retVal;
}
}
ダウンロードにも使用ASIHTTPRequest
していますが、問題なく動作します。を使用してASINetworkQueue
います。
ASIHTTPRequest を使用する以外に、Async Request を試すことができます。次のコードは、画像のダウンロードに関する詳細を提供します。それを zip URL リンクに置き換えるだけです。
これは、オプションをダウンロードするための別の方法です。アプリでより多くのスレッド関数を使用すると、パフォーマンスの問題が発生します。
-(IBAction)startdownload
{
for (int i=0; i<[downloadarray count]; i++) //download array have url links
{
NSURL *URL = [NSURL URLWithString:[downloadarray objectAtIndex:i]];
NSMutableURLRequest *urlRequest = [[NSMutableURLRequest alloc]initWithURL:URL];
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
[NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
{
if([data length] > 0 && [[NSString stringWithFormat:@"%@",error] isEqualToString:@"(null)"])
{
//make your image here from data.
UIImage *imag = [[UIImage alloc] initWithData:[NSData dataWithData:data]];
NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [array objectAtIndex:0];
NSString *imgstr=[NSString stringWithFormat:@"%d",i];
NSString *pngfilepath = [NSString stringWithFormat:@"%@sample%@.png",docDir,imgstr];
NSData *data1 = [NSData dataWithData:UIImagePNGRepresentation(imag)];
[data1 writeToFile:pngfilepath atomically:YES];
}
else if ([data length] == 0 && [[NSString stringWithFormat:@"%@",error] isEqualToString:@"(null)"])
{
NSLog(@"No Data!");
}
else if (![[NSString stringWithFormat:@"%@",error] isEqualToString:@"(null)"]){
NSLog(@"Error = %@", error);
}
}];
}
-(IBAction)viewfile
{
NSMutableArray *arr=[[NSMutableArray alloc]init];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *pngfilepath = [NSString stringWithFormat:@"%@",documentsDirectory];
NSArray *filePathsArray = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:pngfilepath error:&error];
for (int i=0; i<[filePathsArray count]; i++){
NSString *pngfilepath = [NSString stringWithFormat:@"%@%@",documentsDirectory, [filePathsArray objectAtIndex:i]];
[arr addObject:[UIImage imageWithContentsOfFile:pngfilepath]];
}
myimageview = [[UIImageView alloc] initWithImage:[arr objectAtIndex:0]]; //Here myimageview is UIImageView
}
それが役に立てば幸い !!!