Iphone 解压设备上的文件因超时而崩溃

Iphone 解压设备上的文件因超时而崩溃,iphone,objective-c,nsdata,nsurl,ziparchive,Iphone,Objective C,Nsdata,Nsurl,Ziparchive,我正在尝试解压一个通过URL下载的文件。下载的文件是zip格式的。我用过图书馆:里面有SSZipArchive图书馆。它在当前代码中用于在下载后解压缩文件。但当我以独立应用程序的形式运行应用程序时,由于给出日志错误而崩溃:example.app未能及时启动。我不确定我是否可以使用这个库,或者是否有任何其他库已经过尝试、测试并在设备上运行 - (void)viewDidLoad { [super viewDidLoad]; NSFileManager *fileManager =

我正在尝试解压一个通过URL下载的文件。下载的文件是zip格式的。我用过图书馆:里面有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");
 }

viewDidLoad方法是从应用程序的主线程调用的,由于下载和解压操作需要花费大量时间,因此会冻结主线程。这就是为什么你会看到这个错误

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

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