问题标签 [icloud-documents]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
155 浏览

macos - 确定文件是否在任何 macOS 废纸篓文件夹中

iOS也有类似的问题,但我发现建议的解决方案并非在所有情况下都适用于 macOS。

在 Mac 上,有许多可能的废纸篓文件夹:

  • /.Trashes
  • ~/.Trash
  • ~/Library/Mobile Documents/com~apple~CloudDocs/.Trash– 这个来自 iCloud
  • /Users/xxx/.Trash– 任何其他用户的垃圾
  • /Volumes/xxx/.Trashes

此代码应该有效,但不适用于 iCloud 垃圾箱:

如果 URL 指向任何 iCloud 文件夹(包括上面显示的垃圾箱文件夹),我会收到以下错误:

奇怪的是,即使是 10.15 SDK 中“NSFileManager”的头文件也建议使用相同的代码:

iCloud 同步文件夹上似乎也存在问题trashItemAtURL:

那么,我该如何解决呢?如果 Finder 可以检测到 iCloud 垃圾,我也应该可以。

(注意:我用来测试的应用程序甚至没有沙盒)

更多发现:也因死符号链接而失败

getRelationship:如果 url 指向目标不存在的符号链接,官方建议的使用方法也会失败并出现错误。

所以,基本上,这个功能已经很糟糕了(在 10.13.6、10.15.7 和 11.0.1 中得到了验证)。

这是演示该错误的代码,我在 FB8890518 下向 Apple 提交了该代码:

0 投票
0 回答
35 浏览

ios - 如何以异步方式访问 iCloud 文档文件

我正在尝试在我现有的应用程序中添加对 iCloud Documents 的支持,但我很难做到这一点。

苹果似乎更喜欢你使用这个UIDocument类。但是 UIDocument 不会直接访问文件系统中的文件,而是希望在 NSData 对象中维护文件内容的副本。在我的情况下,这根本不可行。我当前使用的所有代码和一半的 3rd 方库都直接使用文件系统上的文件,而不是使用 NSData。重写所有这些代码根本不可行。

当不使用 UIDocument 类时,Apple 希望您使用NSFileCoordinator来协调对文件内容的访问。我试图用我的代码来做到这一点,但是 NSFileCoordinator 上的方法似乎期望所有的读取和写入都将在一个同步序列中完成。NSFileCoordinator 的所有方法都以一个块作为参数,并期望所有的读/写都在该块内执行。据我了解,当块返回时,您不再被允许进行任何文件访问。

这在我的情况下也是不可行的。我的一些代码和第 3 方库在后台线程上以异步方式进行读/写。我可以确定代码需要访问文件内容的时间段的开始和结束,所以如果有一个单独的requireAccess方法,并且relinquishAccess在 上分开NSFileCoordinator,那将使我能够实现目标。但情况似乎并非如此。

我不清楚这其中的作用是什么NSFilePresenter。一些文档,尤其是relinquishPresentedItemToReader()NSFilePresenter 中的文档似乎表明您实际上可以单独获取/放弃访问权限:

如果您想在阅读器完成其任务时收到通知,请将您自己的块传递给阅读器并使用该块重新获取文件或 URL 以供您自己使用。

但它没有在任何地方解释如何“重新获取”文件。

所以具体的问题:我需要以异步方式执行以下步骤:

  1. 获取对文件的访问权限,并file:在本地文件系统上获取文件的 URL
  2. file:在该URL上使用正常的文件系统操作对文件执行多个异步读/写操作
  3. 放弃对文件的访问

有谁知道是否可以这样做,以及如何执行第 1 步和第 3 步?

0 投票
0 回答
26 浏览

ios - 更新 Icloud 文档上的 pdf 文件

我正在开发文档应用程序并使用 iCloud 文档,我能够执行所有基本操作,但如果用户在 pdf 中添加或删除页面,我必须重新上传整个文档。这种方法的问题在于,如果文档很大,并且如果用户不断进行更改,那么频繁上传新文档不是一个可行的解决方案。有没有办法更新云文件只做小的改动?那可能吗?

0 投票
0 回答
22 浏览

ios - SwiftUI:iCloud 文档和 CloudKit

我正在开发一个同时使用 iCloud Documents 和新 CloudKit 的应用程序。这两项服务在“签名和功能”下的 iCloud 部分都处于活动状态。

XCode 中的 iCloud 服务和容器

因为整个app都用到了CloudKit,所以我会在appDelegate中像这样实例化

并通过提供

在应用程序的视图中,我试图从 iCloud Documents 访问数据,所以我正在做的是:

但是每次我进入视图时,我都会得到:

但是实体是在 NSFetchRequest 中指定的。

我不明白为什么

0 投票
0 回答
9 浏览

ios - 在编辑 iCloud 文档时锁定它?

我正在尝试将我的应用程序的文档(UIDocument子类)存储在一个无处不在的容器中。到目前为止,一切似乎都正常:在一台设备上创建文件会使文件显示在另一台设备上,在一台设备上删除它会从另一台设备上删除它。

我有一个视图来管理文档(添加、删除、重命名等),我还可以从中打开文档进行编辑。

当然,我想阻止用户在设备 B 上编辑文档时删除设备 A 上的文档。我注意到NSFileCoordinator当我在尝试删除在同一设备上打开的文档- 如果文档在另一设备上打开,也会出现这种情况吗?

在这种情况下,我可以通知用户他无法删除该文件,因为它正在另一台设备上进行编辑,但我还没有找到任何方法来检查这种情况。

如果协调器在没有阻止的情况下删除了文件,它会在保存到其他设备后重新出现,这可能会让用户感到困惑。

处理这种情况有什么好的解决方案?

0 投票
0 回答
27 浏览

swift - SwiftUI 和 iCloud 文档

我正在尝试将 iCloud 与 SwiftUI 一起使用。我只想能够读/写存储在那里的 json 文件。我相信我已经采取了所有适当的步骤来实现这一目标,包括对签名和功能进行必要的更改以及在 info.plist 中添加设置。我已经在模拟器上设置了 iCloud。但以下代码始终为 URL 返回 nil:

我错过了什么?