2013-04-19 52 views
8

Sau StoreKit tải các gói nội dung IAP nó trả về một NSURL với tôi trông như thế này:Cách giải nén tệp .zip trên iOS?

file: // localhost/private/var/mobile/Applications/45EF2B3A-3CAB-5A44-4B4A-631A122A4299/Thư viện/bộ nhớ cache/BA32BC55-55DD-3AA4-B4AC-C2A456622229.zip/

Mặc dù tất cả các nguồn tôi đã xác nhận rằng StoreKit giải nén gói nội dung sau khi tải xuống, nó sẽ đưa tôi qua ZIP. ZIP này có thể chứa cấu trúc tệp của gói nội dung. Nhưng làm thế nào để giải nén này?

+1

Trong nội dung Mua ứng dụng được tải xuống từ kho ứng dụng không được nén nên bạn không cần phải giải nén nó, bạn có thể coi đó là thư mục (xem http://stackoverflow.com/a/19660668/897093) – leafcutter

Trả lời

31

Sử dụng SSZipArchive

Bạn có thể giải nén sử dụng này

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *outputPath = [documentsDirectory stringByAppendingPathComponent:@"/ImagesFolder"]; 

NSString *zipPath = Your zip file path; 

[SSZipArchive unzipFileAtPath:zipPath toDestination:outputPath delegate:self]; 

Hope nó giúp bạn.

9

Có một công cụ bên thứ 3 rất tốt cho nén/giải nén file cho iPhone

https://github.com/soffes/ssziparchive

Rất đơn giản để sử dụng. Hy vọng rằng sẽ giúp !!

Edit:

phương pháp nhanh Tôi tạo ra mà mất url, tải zip và unzips nó

-(void)downloadAndUnzip : (NSString *)sURL_p : (NSString *)sFolderName_p 
{ 
    dispatch_queue_t q = dispatch_get_global_queue(0, 0); 
    dispatch_queue_t main = dispatch_get_main_queue(); 
    dispatch_async(q, ^{ 
     //Path info 
     NSURL *url = [NSURL URLWithString:sURL_p]; 
     NSData *data = [NSData dataWithContentsOfURL:url]; 
     NSString *fileName = [[url path] lastPathComponent]; 
     NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:fileName]; 
     [data writeToFile:filePath atomically:YES]; 
     dispatch_async(main,^


       { 
         //Write To 
         NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
         NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder 
         NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:sFolderName_p]; 

         [SSZipArchive unzipFileAtPath:filePath toDestination:dataPath]; 

        }); 
}); 

} 
Các vấn đề liên quan