如何解决UIDocumentPickerViewController缺少使用directoryURL时要取消的取消按钮
我们正在向UIDocumentPickerViewController
展示URLForUbiquityContainerIdentifier
的URL,并且由于某种原因,它不会为所有用户显示“取消”按钮。有时,它完全丢失了,用户必须先进入“最近”选项卡,然后该选项卡才会强制显示取消按钮。
这是我们呈现模式的方式:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,(int64_t)(0.5 * NSEC_PER_SEC)),dispatch_get_main_queue(),^{
[self rootDirectoryForICloudWithFolderName:@"Test" createFolder:YES completion:^(NSURL *ubiquityURL) {
self.picker = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:@[(NSString *)kUTTypeJPEG] inMode:UIDocumentPickerModeOpen];
self.picker.directoryURL = ubiquityURL;
self.picker.delegate = self;
[self presentViewController:self.picker animated:YES completion:nil];
}];
});
}
- (void)rootDirectoryForICloudWithFolderName:(NSString *)folderName createFolder:(BOOL)createFolder completion:(void (^)(NSURL *))completionHandler {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{
NSURL *rootDirectory = [[[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil] URLByAppendingPathComponent:[NSString stringWithFormat:@"Documents/%@",folderName]];
if (rootDirectory) {
if (![[NSFileManager defaultManager] fileExistsAtPath:rootDirectory.path isDirectory:nil] && createFolder) {
[[NSFileManager defaultManager] createDirectoryAtURL:rootDirectory withIntermediateDirectories:YES attributes:nil error:nil];
}
}
dispatch_async(dispatch_get_main_queue(),^{
completionHandler(rootDirectory);
});
});
}
我正在将directoryURL设置为我们应用程序的iCloud文档文件夹的普遍存在的URL。奇怪的是,这仅在具有唯一捆绑包标识符的新安装中发生。如果我切换选项卡,以使取消按钮出现,则在下次启动时它将正常工作。但是,更改包标识符会导致该错误再次发生。
Apple曾说过这是一个错误,但在iOS 14 beta 5中仍未修复。任何人都可以想到此问题的解决方法,因为我们很乐意使用此功能!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。