5

RubyMotionでファイルをダウンロードして解凍する必要があります。例を探してみましたが、このプロセスは見つかりませんでした。

リクエストからのすべてのデータである変数(@file)があります。そのデータをファイルに書き込んでから解凍し、解凍したデータを永続化して、tmp圧縮ファイルを削除する必要があります。

これが私がこれまでに持っているものです:

   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

どんな助けや例も素晴らしいでしょう!

4

1 に答える 1

3

そのため、解凍と解凍のためにこれを解決しました。

解凍するには:

#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

SSZipArchive ライブラリを含める必要があることに注意してください。cocoapod の代わりに obj-c lib を使用しました。これを行うには、Rakefile に次の行を追加します (obj-c ファイルを vendor/SSZipArchive フォルダーに置くと仮定します)。

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

解凍するには:

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)

この場合、Light Untar lib (https://github.com/mhausherr/Light-Untar-for-iOS/) が必要になります。この lib を含めるには、Rakefile に以下を追加します (ファイルが vendor/unTar にあると仮定します):

app.vendor_project('vendor', :static, :headers_dir=>"unTar")
于 2012-10-06T20:44:36.800 に答える