2012-10-02 5 views
5

Ich muss eine Datei in RubyMotion herunterladen und dekomprimieren. Ich habe versucht, nach Beispielen zu suchen, konnte aber nichts von diesem Prozess finden.Rubymotion: Zip-Datei herunterladen und extrahieren in iOS

Ich habe eine Variable (@Datei), die alle Daten aus der Anfrage ist. Ich muss diese Daten in eine Datei schreiben und dann entpacken, die unkomprimierten Daten persistieren und die tmp komprimierte Datei löschen.

Hier ist, was ich bisher:

class LoadResourcesViewController < UIViewController 


    def viewDidAppear(animated) 
    @loading_bar = retrieve_subview_with_tag(self, 1) 
    req=NSURLRequest.requestWithURL(NSURL.URLWithString("#{someurl}")) 
    @connection = NSURLConnection.alloc.initWithRequest req, delegate: self, startImmediately: true 
    end 

    def connection(connection, didFailWithError:error) 
    p error 
    end 

    def connection(connection, didReceiveResponse:response) 
    @file = NSMutableData.data 
    @response = response 
    @download_size = response.expectedContentLength 
    end 

    def connection(connection, didReceiveData:data) 
    @file.appendData data 
    @loading_bar.setProgress(@file.length.to_f/@download_size.to_f) 
    end 

    def connectionDidFinishLoading(connection)  
    #create tmp file 
    #uncompress .tar, .tar.gz or .zip 
    #presist uncompresssed files and delete original tmp file 

    puts @file.inspect 
    @connection.release 
    solutionStoryboard = UIStoryboard.storyboardWithName("Master", bundle:nil) 
    myVC = solutionStoryboard.instantiateViewControllerWithIdentifier("Main3") 
    self.presentModalViewController(myVC, animated:true) 
    end 

end 

Jede Hilfe oder Beispiele wäre großartig!

Antwort

3

Also habe ich das zum Entpacken und Entpacken gelöst.

entpacken:

#UNZIP given you have a var data that contains the zipped up data. 
tmpFilePath = "#{NSTemporaryDirectory()}temp.zip" #Get a temp dir and suggest the filename temp.zip 
@fileManager = NSFileManager.defaultManager() #Get a filemanager instance 
@fileManager.createFileAtPath(tmpFilePath, contents: data, attributes:nil) #Create the file in a temp directory with the data from the "data" var. 

destinationPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, true).objectAtIndex(0) //get the target home for the unzipped files. This MUST be within your domain in order to persist. 

SSZipArchive.unzipFileAtPath(tmpFilePath, toDestination: destinationPath) #Use the SSZipArchive to unzip the file. 
@fileManager.removeItemAtPath(tmpFilePath, error: nil) #Cleanup the tmp dir/files 

Denken Sie daran, Sie SSZipArchive lib enthalten müssen. Ich habe die Obj-c-Lib anstelle eines Cocoapod verwendet. Dazu die folgenden Zeilen in der Rakefile hinzufügen (vorausgesetzt, dass Sie die obj-c-Dateien in Verkäufer/SSZipArchive Ordner abgelegt):

app.libs += ['/usr/lib/libz.dylib'] 
app.vendor_project('vendor/SSZipArchive', :static) 

zu Untar:

dir = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, true) #get target dir for untar'd files 
error_ptr = Pointer.new(:object) 
NSFileManager.defaultManager.createFilesAndDirectoriesAtPath(dir[0], withTarData: data, error: error_ptr) #Create and untar te data (assumes you have collected some tar'd data in the data var) 

In diesem Fall müssen Sie die Light Untar-Bibliothek (https://github.com/mhausherr/Light-Untar-for-iOS/). Um diese lib hinzuzufügen, fügen Sie die folgenden zu Ihrem Rakefile hinzu:

app.vendor_project('vendor', :static, :headers_dir=>"unTar") 
+0

hat mir geholfen, ein ähnliches Problem zu lösen, danke für Ihre Lösung! – sbauch

Verwandte Themen