【发布时间】:2020-06-29 03:00:43
【问题描述】:
保存到共享 iCloud 文件夹时,我的应用程序的 OSX 版本和应用程序的 iOS 版本之间共享文件时遇到问题。
iMac 版本可以读取共享文件夹中的任何文件。但是 iOS 版本无法读取从 OSX 版本保存的文件。
在 iOS 上调用 contentsOfDirectory 时
FileManager.default.contentsOfDirectory(at: mmFile.containerUrl!, includingPropertiesForKeys: nil, options: [])
我得到的网址是这样的:
file:///private/var/mobile/Library/Mobile%20Documents/iCloud~xxx/Documents/Untitled.render-z, file:///private/var/mobile/Library/Mobile%20Documents/iCloud ~xxx/Documents/.refract.render-z.icloud
第一个文件保存在 iOS 上并正确加载,第二个来自 OSX,其中有一个“。”前缀和“.icloud”后缀,无法加载。
我用相同的代码保存文件:
stringData.write(to: url(), atomically: true, encoding: .utf8)
编码无关紧要,如果我使用 .ascii 或 .utf8 等,其行为相同。
当我尝试在 iOS 中读取这样的文件时,我会得到类似的内容
bplist00Ó\NSURLNameKey_NSURLFileSizeKey_NSURLFileResourceTypeKey_2spheres.render-z
我想不通!所有权利和 plist 属性似乎都是正确的,并且共享 iCloud DB 也可以正常工作。
【问题讨论】:
-
从 OSX 创建文件时您实际使用的文件名是什么,您希望看到什么内容?文件 .refract.render-z.icloud 是一个隐藏文件,看起来像某种元数据
-
这是一个带有编码 JSON 的字符串,它序列化了项目状态。我使用相同的代码来读取/写入字符串内容,它在所有情况下都可以正常工作,除了读取在 iOS 上的 OSX 上创建的文件。我可以在 OSX 上读取没有问题的相同文件,并且它没有显示为隐藏。