如何从 Icloud Swift 上的文件中获取数据

Posted

技术标签:

【中文标题】如何从 Icloud Swift 上的文件中获取数据【英文标题】:How to get the data from file on Icloud Swift 【发布时间】:2016-10-12 22:17:12 【问题描述】:

我正在创建一个从 Icloud 获取文件并将其转换为 b64 格式字符串的应用程序,但我遇到了一个问题:

我真的不知道如何从这个文件中获取数据。我认为从 ICloud 导入的文件中打开路径可能很容易,但是当我尝试访问路由时它返回 nil。

我的代码示例在这里,你可以看到我有临时路由:( (file:///.../Aplication/xxx-xxx-xxx-xx/temp/com.domain.AppName/Carolina. cer):

extension KeyViewController: UIDocumentMenuDelegate 

    func documentMenu(documentMenu: UIDocumentMenuViewController, didPickDocumentPicker documentPicker: UIDocumentPickerViewController) 
        documentPicker.delegate = self
        print ("documentMenu")
        self.presentViewController(documentPicker, animated: true, completion: nil)
    

extension KeyViewController: UIDocumentPickerDelegate 

func documentPicker(controller: UIDocumentPickerViewController, didPickDocumentAtURL url: NSURL) 
    print("url string")
    print(String(url))
//prints file:///.../Aplication/xxx-xxx-xxx-xx/temp/com.domain.AppName/Carolina.cer

if controller.documentPickerMode == UIDocumentPickerMode.Import 
            if (NSFileManager.defaultManager().fileExistsAtPath(String(url)))
                    print("exists")
            
            else
                    print("not exists")
            
        dispatch_async(dispatch_get_main_queue()) 
            if let fileName = url.lastPathComponent 
                var fileNameArray = fileName.componentsSeparatedByString(".")
                print ("fileNameArray")
                print (fileNameArray)
                if ((fileNameArray[1] != "cer") && (fileNameArray[1] != "key")) 
                    self.alertMessage = "Not a valid selection, choose .cer or .key Files"
                    self.showAlertMessage(self.alertMessage)
                
                else
                //saving the name
                    if (fileNameArray[1]=="cer")
                    
NSUserDefaults.standardUserDefaults().setObject(fileName, forKey: "temporalCerFile")
                    
                    else
                    //saving the name
NSUserDefaults.standardUserDefaults().setObject(fileName, forKey: "temporalKeyFile")
                    
NSUserDefaults.standardUserDefaults().synchronize()
                    

                

            

        
    

如何获取文件中的内容?拜托,希望你能帮助我

【问题讨论】:

您在哪里尝试访问给定 URL 的文件?您发布的代码会打印 URL 并拆分 URL 的文件名,但它不会尝试实际访问 URL 处的文件。 已编辑,抱歉我忘记粘贴那部分了。谢谢 您发布的更新代码仍然没有尝试访问该文件。到目前为止,您所拥有的只是检查它是否存在。而且您发布的代码甚至无法编译,因为您试图将 NSURL 传递给需要 String 的方法。 这就是我真的不知道如何访问文件的关键(我从ios开始),所以我尝试先访问路径(如果存在)但它没有。如果该路径存在,我想我必须使用 let document = File.open(path) ,然后使用类似 while var line = document.readline() 试试这个解决方案***.com/a/50397424/2171764 【参考方案1】:

您的代码不起作用,因为您将错误的值传递给 fileExistsAtPath:

将文件NSURL 转换为文件字符串的正确方法是使用path() 方法。

if (NSFileManager.defaultManager().fileExistsAtPath(url.path())) 

可能是url.path 而不是url.path()。我不确定旧的 Swift 语法。在 Swift 3 中它将是:

if FileManager.default.fileExists(atPath: url.path) 

一旦你知道它存在,加载文件的方法有很多种。这一切都取决于你需要用它做什么。但第一个要求是将文件从给定的url 移动到应用程序沙箱内的某个位置。至少如果您需要该文件在下次使用您的应用程序时仍然存在。如果只需要看一次文件,则不需要这一步。

【讨论】:

以上是关于如何从 Icloud Swift 上的文件中获取数据的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 如何让所有照片的相册都包含 iCloud Library?

如何使用 Cloudkit 快速从 iCloud 获取当前用户信息

从 icloud 打开文件时,Swift 4 应用程序崩溃

无法从 UIDocumentPickerViewController ios swift 获取 .doc 文件

Swift - 无法连接到 iCloud 文档

SWIFT - 将文件上传到 icloud 文档未完成