繁体   English   中英

iPhone:在运行时下载zip并在主bundle子目录中解压缩

[英]iPhone: Downloading zip and extracting in main bundle subdirectory at runtime

我想扩展我的iPhone应用程序,应用程序将zip文件下载到子目录,然后提取它,然后加载zip中的图像。

任何想法如何在运行时解压缩和访问图像? 一些想法真的很开心。

问候,

我过去曾经使用过ZipArchive

它非常轻巧,易于使用,支持密码保护,ZIP内的多个文件,以及压缩和解压缩。

基本用法是:

NSString *filepath = [[NSBundle mainBundle] pathForResource:@"ZipFileName" ofType:@"zip"];
ZipArchive *zipArchive = [[ZipArchive alloc] init];
[zipArchive UnzipOpenFile:filepath Password:@"xxxxxx"];
[zipArchive UnzipFileTo:{pathToDirectory} overWrite:YES];
[zipArchive UnzipCloseFile];
[zipArchive release];

您无法提取到您的包中。 使用[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]获取可写入目录的路径。

您可以使用http://code.google.com/p/ziparchive/中的代码从zip存档中提取文件。

如果您将ZipArchive添加到项目中,请记住还要添加框架。 正确的框架是libz.dylib 最新版本(Xcode 4.2)是1.2.5

(在目标的构建阶段选项卡中将库添加到包含库的部分。)

我建议你使用ssziparchive bcoz它支持ARCNon ARC项目。

  1. SSZipArchive.hSSZipArchive.mminizip添加到项目中。
  2. libz (现在的libz1.2.5 )库的最新版本添加到目标。

你不需要对ARC做任何事情。 SSZipArchive将检测您是否使用ARC并添加所需的内存管理代码。

代码将是这样的:

    NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

    // Unzipping

    //If your zip is in document directory than use this code
    NSString *zipPath = [documentsDirectory stringByAppendingPathComponent:@"mediadata.zip"];
    //else if zip file is in bundle than use this code
    NSString *zipPath = [[NSBundle mainBundle] pathForResource:@"mediadata" ofType:@"zip"];

    NSString *destinationPath = [documentsDirectory stringByAppendingPathComponent:@"MediaData"];


    if( [SSZipArchive unzipFileAtPath:zipPath toDestination:destinationPath] != NO ) {
        //unzip data success
        //do something
        NSLog(@"Dilip Success");
    }else{
        NSLog(@"Dilip Error");
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM