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];,然后将attrNSMetadataUbiquitousItemDownloadingStatusCurrent 或其他可能的下载状态值之一进行比较。 嗯,这不会编译。我收到来自 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 上无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

NSFilemanager 的使用

NSFileManager

NSFileManager的应用

教程 使用 NSFileManager 存储数据?

NSFileManager和NSFileHandle

NSFileManager - 创建一个只读文件