Пользовательский UTI не открывается в приложении - PullRequest
4 голосов
/ 22 декабря 2011

Я пытаюсь создать новый документ UTI для своего приложения, чтобы люди могли делиться интересными вопросами с другими. Из того, что я могу понять в SO, Tutorials и из документации Apple, вам нужно сделать следующее:

  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>

Большое спасибо за любую помощь !! -Марк

Ответы [ 2 ]

1 голос
/ 29 декабря 2011

Я, наконец, понял, что случилось, разобрав весь код.

Когда я изменяю "public.filename-extension" на строку, а не на массив строк, это работает. Не спрашивайте меня, почему ... Я думаю, странно, что мы не можем использовать массив расширений файлов. Но, видимо, это было так.

Есть идеи, почему это произошло?

0 голосов
/ 16 июля 2012

В моем случае, я мог бы сохранить расширение имени файла как массив без проблем. Вместо этого проблема была в public.data. Я переключился на 'public.image', а затем использовал jpg, jpeg и png в качестве расширений файлов, и это неожиданно сработало.

...