2014-09-23 27 views
2

我有一個應用程序來存儲用戶創建的內容與自定義文件(自定義擴展/ UTI),並希望它支持使用UIDocumentPicker的iCloud驅動器。刪除UIDocumentPicker導入/導出與自定義UTI

1. 問題是,一旦文件被導入,它就會變灰,變得無法導入。 嘗試了幾件事情後,我發現問題出在custome UTI上。 如果我只是將文件擴展名更改爲一個知名的文件擴展名,例如pdf,它就可以工作。

我還使用了下面的示例代碼(只是選擇一個文檔,並且什麼都不做)來測試。 如果我選擇一個帶有自定義擴展名的文件,它將在導入一次後變爲灰色。 pdf文件沒有問題 - 我可以一次又一次地導入它們。

我錯過了什麼嗎?

2. 另一個問題是,如果我將文檔類型指定爲@「public.composite-content」,我可以在根中選擇一個pdf文檔,但不能訪問包含pdf文件的文件夾。如果我使用kUTTypePDF,我可以做到這一點。 這是預期的行爲,還是隻是一個錯誤?


-(void)openDocumentPicker 
{ 
    UIDocumentPickerViewController *vc = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:@[@"public.composite-content"] inMode:UIDocumentPickerModeImport]; 
    vc.delegate = self; 
    vc.modalPresentationStyle = UIModalPresentationFormSheet; 
    [self presentViewController:vc animated:YES completion:nil]; 
} 

- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURL:(NSURL *)url { 
    return; 
} 

回答

1

如果你仍然有這個問題,或其他人面臨同樣的,這是我得到它的工作:

1)UTI聲明中info.plst:

<key>UTExportedTypeDeclarations</key> 
    <array> 
      <dict> 
        <key>UTTypeConformsTo</key> 
        <array> 
          <string>public.data</string> 
        </array> 
        <key>UTTypeDescription</key> 
        <string>Holiday backup file</string> 
        <key>UTTypeIdentifier</key> 
        <string>de.myDomain.foobar.alb</string> 
        <key>UTTypeTagSpecification</key> 
        <dict> 
          <key>public.filename-extension</key> 
          <array> 
            <string>alb</string> 
          </array> 
          <key>public.mime-type</key> 
          <string>application/alb</string> 
        </dict> 
      </dict> 
    </array> 
    <key>CFBundleDocumentTypes</key> 
    <array> 
      <dict> 
        <key>CFBundleTypeName</key> 
        <string>Holiday backup file</string> 
        <key>CFBundleTypeRole</key> 
        <string>Editor</string> 
        <key>LSHandlerRank</key> 
        <string>Owner</string> 
        <key>LSItemContentTypes</key> 
        <array> 
          <string>de.myDomain.foobar.alb</string> 
        </array> 
      </dict> 
    </array> 

UTTypeConformsTo/public.data是這裏的重要部分。

2)UIDocumentPicker

 UIDocumentPickerViewController* dvc= [[UIDocumentPickerViewController alloc] initWithDocumentTypes:[NSArray arrayWithObject:@"de.myDomain.foobar.alb"] inMode:UIDocumentPickerModeImport]; 

所以在你上面的例子,你初始化的選擇器與@"public.composite-content",而你應該用你的info.pls文件中提供(在我的例子「de.myDomain正確的標識符。 foob​​ar.alb「)。