当前位置: 首页 > 面试题库 >

快速将文档文件写入/保存/移动到iCloud驱动器

养慈
2023-03-14
问题内容

我已经尝试了两天以上,将文件写入iCloud驱动器。我尝试直接在本地编写一个简单的文本文件,然后使用UIDocumentMenuViewController等将其移动。我的代码并没有逐步通过调试程序,但没有出现任何错误,但是看起来很成功,但是当我检查文件是否存在或至少iCloud目录中没有任何内容。我在模拟器和iPhone上都进行了尝试,触发了iCloud同步以及我能想到的所有其他功能。

我的主要目标是简单地将文本文件写入iCloud驱动器,以后将是“数字”文件

我已经设置了我的plist文件和权利:

<key>NSUbiquitousContainers</key>
<dict>
    <key>iCloud.com.paul.c.$(PRODUCT_NAME:rfc1034identifier)</key>
    <dict>
        <key>NSUbiquitousContainerIsDocumentScopePublic</key>
        <true/>
        <key>NSUbiquitousContainerName</key>
        <string>myCloudTest</string>
        <key>NSUbiquitousContainerSupportedFolderLevels</key>
        <string>Any</string>
    </dict>
</dict>

我已经尝试了几十本没有运气的教程。我的最新代码基于以下示例https : //medium.com/ios-os-x-
development/icloud-drive-documents-1a46b5706fe1

这是我的代码:

@IBAction func ExportFile(sender: AnyObject) {

    var error:NSError?

    let iCloudDocumentsURL = NSFileManager.defaultManager().URLForUbiquityContainerIdentifier(nil)?.URLByAppendingPathComponent("myCloudTest")

    //is iCloud working?
    if  iCloudDocumentsURL != nil {

        //Create the Directory if it doesn't exist
        if (!NSFileManager.defaultManager().fileExistsAtPath(iCloudDocumentsURL!.path!, isDirectory: nil)) {
                //This gets skipped after initial run saying directory exists, but still don't see it on iCloud
                NSFileManager.defaultManager().createDirectoryAtURL(iCloudDocumentsURL!, withIntermediateDirectories: true, attributes: nil, error: nil)
        }
    } else {
        println("iCloud is NOT working!")
        //  return
    }

    if ((error) != nil) {
        println("Error creating iCloud DIR")
    }


    //Set up directorys
    let localDocumentsURL = NSFileManager.defaultManager().URLsForDirectory(NSSearchPathDirectory.DocumentDirectory, inDomains: .UserDomainMask).last as! NSURL

    //Add txt file to my local folder
    let myTextString = NSString(string: "HELLO WORLD")
    let myLocalFile = localDocumentsURL.URLByAppendingPathComponent("myTextFile.txt")
    let written = myTextString.writeToURL(myLocalFile, atomically: true, encoding: NSUTF8StringEncoding, error: &error)

    if ((error) != nil){
        println("Error saving to local DIR")
    }


   //If file exists on iCloud remove it
    var isDir:ObjCBool = false
    if (NSFileManager.defaultManager().fileExistsAtPath(iCloudDocumentsURL!.path!, isDirectory: &isDir)) {
        NSFileManager.defaultManager().removeItemAtURL(iCloudDocumentsURL!, error: &error)
    }

    //copy from my local to iCloud
    if (error == nil && !NSFileManager.defaultManager().copyItemAtURL(localDocumentsURL, toURL: iCloudDocumentsURL!, error: &error)) {
        println(error?.localizedDescription);
    }

感谢您抽出宝贵的时间。

保罗,干杯

在上面的代码之后,我在iPhone上运行了一些代码:

var error:NSError?
    let iCloudDocumentsURL = NSFileManager.defaultManager().URLForUbiquityContainerIdentifier(nil) //?.URLByAppendingPathComponent("myCloudTest")

    var fileManager: NSFileManager = NSFileManager()


    var fileList: NSArray = fileManager.contentsOfDirectoryAtURL(iCloudDocumentsURL!, includingPropertiesForKeys: nil, options: nil, error: &error)!
    var filesStr: NSMutableString = NSMutableString(string: "Files in iCloud folder \n")
    for s in fileList {

        println(s)
    }

并打印出我的文本文件的路径:file:///private/var/mobile/Library/Mobile%20Documents/iCloud~com~paul~c~myApp/MyTextFile.txt

我的文件在那里,我只是在iCloud驱动器上看不到它。


问题答案:

我有这个问题。我听了这里的建议,发现Info.plist钥匙不正确。一旦将其更改为iCloud.MY_BUNDLE_IDENTIFIER(即从中的CFBundleIdentifier较高键复制字符串Info.plist),所有内容都将开始工作。

从密钥中删除.com可能会解决您的问题。



 类似资料:
  • 问题内容: 我刚刚在我的应用程序中创建了PDF文档,并且希望通过“文件”应用程序可以访问保存的文档的方式将文档保存在设备上。 当您在Safari中下载PDF文档时,可以选择将文档保存到“文件”应用中。 我用Google搜索了几个小时,但找不到任何有用的方法。 问题答案: 如果您有权访问,则可以向用户显示,然后将其保存到,或与其他任何可用选项共享该用户:

  • 问题内容: 快速将NSDictionaries写入文件有局限性。根据我从api文档中学到的知识和这个答案,键类型应该是NSString,值类型也应该是NSx类型,并且Int,String和其他swift类型可能不起作用。问题是,如果我有一个像这样的字典:如何快速将其写入plist文件或从plist文件读取? 问题答案: 无论如何,当您要存储到文件时,它必须是协议的子类并符合协议。像这样: 然后,这

  • 我需要将所有文件从Camel监控的导入目录移动到另一个目录。为此,我在路由中使用了Camel的移动和移动失败选项。 我在属性文件中有一个MaxFilesAllowedInArchive参数,如果超过文件限制,则必须删除最旧的文件。 如何进行自定义移动和移动无法控制移动的文件数量并将最新文件保存在存档中?

  • 我试图将"/var/lib/docker"文件夹从一个磁盘移动到另一个磁盘,因为这占用了太多的空间。我一直遇到一些与权限相关的错误! 根据这些问题: 如何将docker容器的映像移动到永久磁盘 如何在另一个分区上运行docker LXC容器 我的磁盘安装在"/data"上,我将"/var/lib/docker"文件夹复制到"/data/docker" 这就是我所尝试的: 使用“/data/DOCK

  • 我正在将我的应用程序从XCode7和iOS9.x移植到XCode8和iOS10。我正在为处理这些文件而苦苦挣扎。 错误域=nscocoaErrorDomain代码=4“”xxxx.pdf“无法移动到”tmp“,因为前者不存在,或者包含后者的文件夹不存在。”userInfo={nsSourceFilePatherRokey=/file:/users/xxx/Library/Developer/Cor

  • 我相当愚蠢地上传了一个vhd到Azure文件存储,以为我可以从它创建一个虚拟机,却发现它真的需要在Blob存储中。 我知道我可以再上传一次,但它非常大,我的上传速度非常慢。 我的问题是-我可以将文件从文件存储移动到blob存储,而无需再次下载/上传吗?也就是说,Azure门户UI中是否有任何东西可以执行此操作,甚至是PowerShell命令?