2011-07-11 10 views
0

URLを介してダウンロードされているファイルを解凍しようとしています。ダウンロードしたファイルはzip形式です。私はライブラリを使用しました:iPhone Unzip codeにはSSZipArchiveライブラリがあります。ダウンロードされたファイルを解凍するために現在のコードで使用されます。しかし、スタンドアローンのアプリケーションとしてアプリケーションを実行すると、ログエラーが発生してクラッシュします。example.appは時間内に起動できませんでした。私はこのライブラリを使用することができるかどうか、または試してテストされ、デバイス上で実行されている他のライブラリがあるかどうかはわかりません。タイムアウトのため、デバイス上のファイルの解凍がクラッシュする

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    NSFileManager *fileManager = [NSFileManager defaultManager]; 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *directoryPath = [paths objectAtIndex:0]; 
    NSString *filePath = [NSString stringWithFormat:@"%@/ZipFiles.zip", directoryPath]; 

    NSString* updateURL = @"http://www.example.com/test.php?id=11"; 
    NSData* updateData = [NSData dataWithContentsOfURL: [NSURL URLWithString: updateURL] ]; 

    [fileManager createFileAtPath:filePath contents:updateData attributes:nil]; 
    /* SSZipArchive is a free API built on ZipArchive to unzip the files. Header file is passed in this class.*/ 

    [SSZipArchive unzipFileAtPath:filePath toDestination:directoryPath]; 
    NSLog(@"Finished unzipping database"); 
} 

答えて

0

viewDidLoadメソッドは、アプリケーションのメインスレッドから、ダウンロード以来と呼ばれる操作を解凍しているがかなりの時間を取っている、それはメインスレッドを凍結されます。これがそのエラーを表示している理由です。

メインスレッドがアプリケーションの読み込みを完了できるように、長時間実行する操作をバックグラウンドスレッドに移動する必要があります。これを行うには多くの方法があり、私はブロックの使用を好む。

私はあなたがドキュメントでの同時実行プログラミングガイドを読むことをお勧め:

http://developer.apple.com/library/ios/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40008091

関連する問題