自定义UTI未在App中打开



我正在尝试为我的应用程序创建一个新的文档UTI,以便人们可以与其他人分享兴趣点。从我对SO、教程和苹果文档的理解来看,你需要做以下事情:

  1. 在。plist
  2. 中创建文档类型
  3. 创建一个与之对应的导出UTI
  4. 使用方法:-(BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *) launchOptions

据我所知,只要你做对了这些,你应该可以通过邮件打开文件没有任何问题。不幸的是,它不适用于我自己的自定义uti。我确实看到我的应用程序在邮件中的"打开…"列表中,但是当我选择它时,我的应用程序根本没有打开。它什么都不做不仅在App不打开的时候,而且在App打开的时候。邮件一直挂着,什么也没发生。我还使用"Organizer"检查了控制台,绝对没有发生任何事情。

最初我认为我的plist是错误的,所以我测试打开一个公共UTI(我添加了com.adobe.pdf文档类型),我的应用程序启动得很好(尽管它很快崩溃了,因为我实际上不支持pdf;))。但关键是它发射时没有任何问题。

我唯一能想到的可能是一个问题是我如何创建文件。我使用这种方法在电子邮件中创建文件(也在应用程序中导出):

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>

谢谢你的帮助!div标记

我把所有的代码都拆开了,终于找出了问题所在。

当我改变"public。"Filename-extension"为字符串,而不是字符串数组。别问我为什么……我觉得很奇怪,我们不能使用文件扩展名数组。但显然就是这样。

你知道为什么会这样吗?

在我的例子中,我可以将filename-extension保持为数组而不会出现问题。相反,它是"公众"。数据就是问题所在。我切换到"公共"。Image’,然后用jpg、jpeg和PNG作为文件扩展名,突然就可以了。

最新更新