我正在iOS 8中测试新的UIDocumentPickerViewController API。我只想在iCloud中打开一个文件,以查看交互的工作方式。

这是我从UIViewController运行的代码:

- (IBAction)openDocument:(id)sender {
    [self showDocumentPickerInMode:UIDocumentPickerModeOpen];
}

- (void)showDocumentPickerInMode:(UIDocumentPickerMode)mode {
    UIDocumentPickerViewController *picker = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:@[(NSString *)kUTTypeData] inMode:mode];

    picker.delegate = self;

    [self presentViewController:picker animated:YES completion:nil];
}
openDocument绑定(bind)到IB中的按钮。当我点击它时,它会打开iCloud浏览器,但是其中的每个文件夹都是灰色的(我创建了一些测试Keynote,Numbers和Pages文件),因此无法访问这些文件:



我检查了一些文档,并进行了以下操作(不走运):
  • 在我的应用程序中启用了iCloud(在“功能”部分中,同时用于键值存储和iCloud文档)。
  • 在我的Info.plist中为public.data添加了UTI,如下所示:
    <key>CFBundleDocumentTypes</key>
    


    CFBundleTypeIconFile
    icon.png
    CFBundleTypeName
    我的数据
    CFBundleTypeRole
    观看者
    LSItemContentTypes

    公共(public)数据

    LSTypeIsPackage

    NSDocumentClass
    文档
    NSPersistentStoreTypeKey
    二进位

  • 在我的Info.plist中添加了NSUbiquitousContainerIsDocumentScopePublic键,其值为YES

  • 知道什么是错的或丢失的吗?

    最佳答案

    iWork文档不符合kUTTypeData,它们符合kUTTypePackage

    但是,在iOS 8 beta 3中,我必须使用确切的UTI:

    UIDocumentPickerViewController *picker = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:@[@"com.apple.iwork.pages.pages", @"com.apple.iwork.numbers.numbers", @"com.apple.iwork.keynote.key"] inMode:mode];
    

    10-07 19:14
    查看更多