mis*_*der 5 file ios rubymotion
我需要在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
Run Code Online (Sandbox Code Playgroud)
任何帮助或示例都会很棒!
所以我已经解决了这个问题,以便解压和解压。
解压:
#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
Run Code Online (Sandbox Code Playgroud)
请记住,您必须包含 SSZipArchive 库。我使用 obj-c lib 而不是 cocoapod。为此,请在 Rakefile 中添加以下行(假设您将 obj-c 文件放在供应商/SSZipArchive 文件夹中):
app.libs += ['/usr/lib/libz.dylib']
app.vendor_project('vendor/SSZipArchive', :static)
Run Code Online (Sandbox Code Playgroud)
解压:
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)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您将需要 Light Untar 库 (https://github.com/mhausherr/Light-Untar-for-iOS/)。要包含此库,请将以下内容添加到 Rakefile 中(假设文件位于供应商/unTar 中):
app.vendor_project('vendor', :static, :headers_dir=>"unTar")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1132 次 |
| 最近记录: |