2012-10-02 21 views
5

Bir dosyayı indirip açmam gerekiyor RubyMotion. Örnek aramayı denedim ama bu sürecin hiçbirini bulamadım.Rubymotion: iOS Dosyasını İndirin ve Ayıkla Dosyayı Kaydet

İsteğimdeki tüm verilerde bir değişken (@ dosya) var. Bu veriyi bir dosyaya yazmam ve daha sonra onu açmam, sıkıştırılmamış veriyi devam et ve tmp sıkıştırılmış dosyayı silmem gerekiyor. İşte

Bugüne kadar ne var:

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 

Herhangi bir yardım veya örnekler çok iyi olurdu!

cevap

3

Bu yüzden unzipping ve untaring için çözdüm.

Sıkıştırılmış İÇİN:

#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 

unutmayın Eğer SSZipArchive lib eklenmesi gerekir. Bir cocoapod yerine obj-lib libresini kullandım. İhtiyacınız olacak Bu durumda

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) 

:

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

Untar için: Bu sizin Rakefile aşağıdaki satırları ekleyin yapmak için (eğer satıcı içinde/SSZipArchive klasörünü obj-c dosyaları koymak varsayar) Işık Untar lib (https://github.com/mhausherr/Light-Untar-for-iOS/). senin Rakefile için aşağıdaki eklenti bu lib dahil etmek (Untar/dosyaları satıcı içindedir varsayar):

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

, bana bir ilgili sorunu çözmek için çözüm yazabilmek için teşekkür yardım etti! – sbauch

İlgili konular