2011-12-22 64 views
4

我正在尝试为我的应用程序创建新文档UTI,以便人们可以与他人分享兴趣点。从我可以在SO理解,教程,以及来自苹果的文档,你需要做到以下几点:自定义UTI未打开应用程序

  1. 中的.plist
  2. 创建文档类型创建一个导出的UTI与它
  3. 对应使用方法: - (BOOL)申请:(UIApplication的*)应用 didFinishLaunchingWithOptions:(NSDictionary的*)launchOptions

据我了解,只要你做的没错,你应该能够打开文件通过邮件没有任何问题秒。不幸的是,它不适用于我自己的自定义UTI。我在Mail中看到我的应用程序在“打开...”列表中,但是当我选择它时,我的应用程序根本无法打开。它不仅在应用程序未打开时,而且在应用程序打开时都不做任何事情。邮件保持不变,完全没有任何反应。我还使用“组织者”检查了控制台,这绝对没有发生。

本来我以为我的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> 

非常感谢您的帮助! -Mark

回答

1

我最终通过拉开所有的代码来弄清楚出了什么问题。

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

关于为什么发生这种情况的任何想法?

0

在我的情况下,我可以保持文件扩展名为数组没有问题。相反,这是“public.data”这个问题。我切换到'public.image',然后将jpg,jpeg和png作为文件扩展名,并突然生效。

相关问题