由于超时,设备上的解压缩文件崩溃

时间:2011-07-11 21:47:47

标签: iphone objective-c nsdata nsurl ziparchive

我正在尝试解压缩通过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");
 }

1 个答案:

答案 0 :(得分:0)

正在从应用程序的主线程调用viewDidLoad方法,并且由于下载和解压缩操作花费了大量时间,因此它冻结了主线程。这就是您看到错误的原因。

您需要将长时间运行的操作移动到后台线程,以便主线程可以自由地完成加载应用程序。有很多方法可以做到这一点,我更喜欢使用块。

我建议您阅读文档中的“并发编程指南”:

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