首页 > 解决方案 > Xamarin ios 云文件复制位置问题

问题描述

我已经使用 xamarin forms ios 连接了 iCloud。我的文件复制到 icloud 没有任何错误。但它保存在file:///private/var/mobile/Library/Mobile%20Documents/iCloud~com~companyname~MobileDoc/路径中。

当我在 iCloud 内部检查时,我的文件没有显示出来。但是当我搜索该文件时,它的位置显示为 iCloud --> MobileDoc--> File.txt。但是当我在 iCloud 内部检查时,没有文件夹调用 MobileDoc。

这是我在这里尝试的示例

这是我用来保存文档的代码。

var uburl = NSFileManager.DefaultManager.GetUrlForUbiquityContainer(null);

                 if (uburl == null)
                 {
                     HasiCloud = false;
                 }
                else
                 {
                     HasiCloud = true;
                     iCloudUrl = uburl;

                     var docsFolder = Path.Combine(iCloudUrl.Path, "Documents"); 
             var filePath = Path.Combine(docsFolder, fileName);

         FileService.Save(filePath, attachment.Content);
                     if (option == false)
                         FileService.Instance.Open(filePath);
                }

标签: iosxamarinicloudicloud-drive

解决方案


保存 iCloud 文档

要将 iCloud 添加UIDocument到 iCloud,您可以UIDocument.Save直接调用(仅适用于新文档)或使用 移动现有文件NSFileManager.DefaultManager.SetUbiquitious。示例代码使用此代码直接在 ubiquity 容器中创建一个新文档(这里有两个完成处理程序,一个用于保存操作,另一个用于打开):

var docsFolder = Path.Combine (iCloudUrl.Path, "Documents"); // NOTE: Documents folder is user-accessible in Settings
var docPath = Path.Combine (docsFolder, MonkeyDocFilename);
var ubiq = new NSUrl (docPath, false);
var monkeyDoc = new MonkeyDocument (ubiq);
monkeyDoc.Save (monkeyDoc.FileUrl, UIDocumentSaveOperation.ForCreating, saveSuccess => {
Console.WriteLine ("Save completion:" + saveSuccess);
if (saveSuccess) {
    monkeyDoc.Open (openSuccess => {
        Console.WriteLine ("Open completion:" + openSuccess);
        if (openSuccess) {
            Console.WriteLine ("new document for iCloud");
            Console.WriteLine (" == " + monkeyDoc.DocumentString);
            viewController.DisplayDocument (monkeyDoc);
        } else {
            Console.WriteLine ("couldn't open");
        }
    });
} else {
    Console.WriteLine ("couldn't save");
}

根据文件,当您将文件保存到 icloud 时,您需要使用UIDocument。这将是安全和稳定的。


推荐阅读