自定义UTI未在应用中打开

时间:2011-12-22 16:38:32

标签: objective-c types ios5 document uti

我正在尝试为我的应用创建一个新文档UTI,以便人们可以与他人分享兴趣点。根据我在SO,Tutorials和Apple的文档中可以理解的内容,您需要执行以下操作:

  1. 在.plist
  2. 中创建文档类型
  3. 创建与其对应的导出UTI
  4. 使用方法: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
  5. 据我所知,只要你做得对,你就可以通过Mail打开文件而不会有任何问题。不幸的是,它不适合我自己的自定义UTI。我在Mail中的“打开方式...”列表中看到我的应用程序,但是当我选择它时,我的应用程序根本无法打开。它不会做任何事情,不仅在应用程序未打开时,而且应用程序打开时。邮件保持不变,一切都没有发生。我还使用“管理器”检查了控制台,绝对没有任何事情发生。

    最初我认为我的plist是错的,所以我测试了打开一个公共UTI(我添加了com.adobe.pdf文档类型)并且我的应用程序启动得很好(虽然它很快崩溃,因为我实际上不支持PDF; ))。但重点是它的推出没有任何问题。

    我能想到的唯一可能是问题的是我如何创建文件。我通过使用此方法在电子邮件中创建文件(也在App中导出):

    MFMailComposeViewController *picker = [[[MFMailComposeViewController alloc] init] autorelease];
    [picker setSubject:[NSString stringWithFormat:@"My place: %@",POIName]];
    [picker addAttachmentData:customPOIData mimeType:@"application/customPOI" fileName:[NSString stringWithFormat:@"%@.icp",POIName]];
    [picker setMessageBody:@"Check out this great place I found!" isHTML:NO];
    [picker setMailComposeDelegate:self];
    [self presentModalViewController:picker animated:YES];
    

    这有什么不对吗?

    另外,这是我的plist代码:

    CFBundleDocumentTypes:

    <key>CFBundleDocumentTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeIconFiles</key>
            <array/>
            <key>CFBundleTypeName</key>
            <string>Custom POI</string>
            <key>CFBundleTypeRole</key>
            <string>Viewer</string>
            <key>LSHandlerRank</key>
            <string>Owner</string>
            <key>LSItemContentTypes</key>
            <array>
                <string>com.imadev.icp</string>
            </array>
        </dict>
    </array>
    

    UTExportedTypeDeclarations:

    <key>UTExportedTypeDeclarations</key>
    <array>
        <dict>
            <key>UTTypeConformsTo</key>
            <array>
                <string>public.data</string>
            </array>
            <key>UTTypeDescription</key>
            <string>Custom POI</string>
            <key>UTTypeIdentifier</key>
            <string>com.imadev.icp</string>
            <key>UTTypeTagSpecification</key>
            <dict>
                <key>public.filename-extension</key>
                <array>
                    <string>icp</string>
                </array>
                <key>public.mime-type</key>
                <string>application/customPOI</string>
            </dict>
        </dict>
    </array>
    

    非常感谢您的帮助!! -Mark

2 个答案:

答案 0 :(得分:1)

我终于通过拆分所有代码来弄清楚出了什么问题。

当我将“public.filename-extension”更改为字符串而不是字符串数组时,它可以正常工作。不要问我为什么......我认为奇怪的是我们不能使用一组文件扩展名。但显然就是这样。

有关为何发生这种情况的任何想法?

答案 1 :(得分:0)

在我的情况下,我可以将filename-extension作为数组保持没有问题。相反,问题是'public.data'。我切换到'public.image'然后将jpg,jpeg和png作为文件扩展名,它突然起作用了。