问题标签 [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.
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 提交了该代码:
ios - 如何以异步方式访问 iCloud 文档文件
我正在尝试在我现有的应用程序中添加对 iCloud Documents 的支持,但我很难做到这一点。
苹果似乎更喜欢你使用这个UIDocument
类。但是 UIDocument 不会直接访问文件系统中的文件,而是希望在 NSData 对象中维护文件内容的副本。在我的情况下,这根本不可行。我当前使用的所有代码和一半的 3rd 方库都直接使用文件系统上的文件,而不是使用 NSData。重写所有这些代码根本不可行。
当不使用 UIDocument 类时,Apple 希望您使用NSFileCoordinator
来协调对文件内容的访问。我试图用我的代码来做到这一点,但是 NSFileCoordinator 上的方法似乎期望所有的读取和写入都将在一个同步序列中完成。NSFileCoordinator 的所有方法都以一个块作为参数,并期望所有的读/写都在该块内执行。据我了解,当块返回时,您不再被允许进行任何文件访问。
这在我的情况下也是不可行的。我的一些代码和第 3 方库在后台线程上以异步方式进行读/写。我可以确定代码需要访问文件内容的时间段的开始和结束,所以如果有一个单独的requireAccess
方法,并且relinquishAccess
在 上分开NSFileCoordinator
,那将使我能够实现目标。但情况似乎并非如此。
我不清楚这其中的作用是什么NSFilePresenter
。一些文档,尤其是relinquishPresentedItemToReader()
NSFilePresenter 中的文档似乎表明您实际上可以单独获取/放弃访问权限:
如果您想在阅读器完成其任务时收到通知,请将您自己的块传递给阅读器并使用该块重新获取文件或 URL 以供您自己使用。
但它没有在任何地方解释如何“重新获取”文件。
所以具体的问题:我需要以异步方式执行以下步骤:
- 获取对文件的访问权限,并
file:
在本地文件系统上获取文件的 URL file:
在该URL上使用正常的文件系统操作对文件执行多个异步读/写操作- 放弃对文件的访问
有谁知道是否可以这样做,以及如何执行第 1 步和第 3 步?
ios - 更新 Icloud 文档上的 pdf 文件
我正在开发文档应用程序并使用 iCloud 文档,我能够执行所有基本操作,但如果用户在 pdf 中添加或删除页面,我必须重新上传整个文档。这种方法的问题在于,如果文档很大,并且如果用户不断进行更改,那么频繁上传新文档不是一个可行的解决方案。有没有办法更新云文件只做小的改动?那可能吗?
ios - 在编辑 iCloud 文档时锁定它?
我正在尝试将我的应用程序的文档(UIDocument
子类)存储在一个无处不在的容器中。到目前为止,一切似乎都正常:在一台设备上创建文件会使文件显示在另一台设备上,在一台设备上删除它会从另一台设备上删除它。
我有一个视图来管理文档(添加、删除、重命名等),我还可以从中打开文档进行编辑。
当然,我想阻止用户在设备 B 上编辑文档时删除设备 A 上的文档。我注意到NSFileCoordinator
当我在尝试删除在同一设备上打开的文档- 如果文档在另一设备上打开,也会出现这种情况吗?
在这种情况下,我可以通知用户他无法删除该文件,因为它正在另一台设备上进行编辑,但我还没有找到任何方法来检查这种情况。
如果协调器在没有阻止的情况下删除了文件,它会在保存到其他设备后重新出现,这可能会让用户感到困惑。
处理这种情况有什么好的解决方案?
swift - SwiftUI 和 iCloud 文档
我正在尝试将 iCloud 与 SwiftUI 一起使用。我只想能够读/写存储在那里的 json 文件。我相信我已经采取了所有适当的步骤来实现这一目标,包括对签名和功能进行必要的更改以及在 info.plist 中添加设置。我已经在模拟器上设置了 iCloud。但以下代码始终为 URL 返回 nil:
我错过了什么?