Question

J'ai besoin de télécharger et de décompresser un fichier à Rubymotion.J'ai essayé de chercher des exemples mais je n'ai trouvé aucun de ce processus.

J'ai une variable (@file) qui correspond à toutes les données de la demande.J'ai besoin d'écrire ces données dans un fichier, puis de décompresser, de persister les données non compressées et de supprimer le fichier compressé TMP.

Voici ce que j'ai jusqu'à présent:

   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

Toute aide ou exemples serait génial!

Était-ce utile?

La solution

J'ai donc résolu ceci pour décompresser et défaire.

Unzip:

#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

Gardez à l'esprit que vous devez inclure le SSZIPARCHIVE LIB.J'ai utilisé l'Obj-C lib au lieu d'un cocoapod.Pour ce faire, ajoutez les lignes suivantes dans votre fichier de rakefile (suppose que vous mettez les fichiers Obj-C dans le dossier Vendor / Ssziparchive):

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

to end:

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)

Dans ce cas, vous aurez besoin de la lumière de la LIB (https://github.com/mhausherr/light-untar-for-ios/).Pour inclure cette liberme dans votre rakeFile (suppose que les fichiers sont en fournisseur / untar):

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top