NSFileManager startDownloadingUbiquitousItemAtURL 在 iOS14 上无法正常工作
Posted
技术标签:
【中文标题】NSFileManager startDownloadingUbiquitousItemAtURL 在 iOS14 上无法正常工作【英文标题】:NSFileManager startDownloadingUbiquitousItemAtURL not working correctly on iOS14 【发布时间】:2020-09-27 12:29:44 【问题描述】:自 2013 年以来,我在 AppStore 中有一个应用程序,它始终运行良好。它在 iCloud 上创建和同步文件。
从 ios14 开始,startDownloadingUbiquitousItemAtURL 只下载现有文件的一小部分。如果我在模拟器和 iOS14 中启动应用程序(当然也在真实设备上)。如果我在使用 iOS12 或 13 的模拟器中启动应用程序,它会按预期工作。
我在网上没有找到任何关于 startDownloadingUbiquitousItemAtURL 方法可能发生变化的信息。
这是有问题的代码:
...
BOOL tt = [[NSFileManager defaultManager] startDownloadingUbiquitousItemAtURL:cloudFileUrl error:&error] ;
if (error != nil)
NSLog(@"ERROR Loading %@", cloudFileUrl) ;
...
tt 为真,error 为 nil,看来同步过程已正确启动
但是,如果我尝试使用
NSArray *dirContent = [[NSFileManager defaultManager] contentsOfDirectoryAtURL:cloudFileUrl includingPropertiesForKeys:[[NSArray alloc] initWithObjects:NSURLNameKey, nil] options:NSDirectoryEnumerationSkipsHiddenFiles error:&error];
尽管文件夹包含 10 个文件,但数组 dirContent 仅包含 3 或 4 个元素。
知道问题可能是什么吗?我也打开了 Apple 的一个错误。
【问题讨论】:
NSMetadataUbiquitousItemDownloadingStatusKey
的值是多少?
您能详细说明一下吗?你有一个如何使用它的例子吗?
NSMetadataItem *item = [[NSMetadataItem alloc] initWithURL:cloudFileURL]; id attr = [item valueForAttribute:NSMetadataUbiquitousItemDownloadingStatusKey];
,然后将attr
与NSMetadataUbiquitousItemDownloadingStatusCurrent
或其他可能的下载状态值之一进行比较。
嗯,这不会编译。我收到来自 Xcode (12.0.1) 的“initWithURL:在 iOS 上不可用”消息 - 这很奇怪,因为文档清楚地说明了这种方法存在。我感觉苹果已经用 iOS14 打破了这一点:-(
【参考方案1】:
好的,解决方案是当它们是二进制文件时,此调用不会读取某些文件。发现了涉嫌的文本文件。
NSArray *dirContent = [[NSFileManager defaultManager] contentsOfDirectoryAtURL:cloudFileUrl includingPropertiesForKeys:[[NSArray alloc] initWithObjects:NSURLNameKey, nil] options:NSDirectoryEnumerationSkipsHiddenFiles error:&error];
我已将呼叫替换为 this
NSArray *dirContent = [[NSFileManager defaultManager] contentsOfDirectoryAtURL:cloudFileUrl includingPropertiesForKeys:[[NSArray alloc] initWithObjects:NSURLNameKey, nil] options:0 error:&error];
现在它又可以工作了。
【讨论】:
以上是关于NSFileManager startDownloadingUbiquitousItemAtURL 在 iOS14 上无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章