首页 > 解决方案 > UIDocumentPickerViewController 在使用 directoryURL 时缺少取消按钮以关闭

问题描述

我们提供了一个UIDocumentPickerViewController带有 URL 的 URL URLForUbiquityContainerIdentifier,无论出于何种原因,它都没有为我们的所有用户显示取消按钮。有时,它完全丢失,用户无法关闭,除非转到“最近”选项卡,它将强制显示取消按钮。

以下是我们展示模态的方式:

- (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 中仍未修复。任何人都可以想到解决此问题的方法,因为我们很想使用此功能!

标签: iosobjective-cicloudnsfilemanageruidocumentpickerviewcontroller

解决方案


推荐阅读