Jak wysłać plik do innej aplikacji, wiedząc, która aplikacja UTI obsługuje? Powiedzmy, że plik nie ma rozszerzenia pliku, ale wiem, że wiem, UTI pliku.UIDocumentInteractionController, bez rozszerzenia pliku, ale UTI
Próbowałem następujące:
// target is a NSURL with the location of the extension less file on the system
// knownUTI is a NSString containing the UTI of the file
UIDocumentInteractionController* dic = [UIDocumentInteractionController interactionControllerWithURL:target];
[dic retain];
dic.delegate = self;
dic.UTI = knownUTI;
[dic presentOpenInMenuFromRect:CGRectZero inView:superController.view animated:YES]
To pokazuje obsługiwanej aplikacji, jednak gdybym go zaznaczyć, że nie będzie przełączyć aplikację. zwraca pełnomocnikowi
- (void)documentInteractionController:(UIDocumentInteractionController *)controller willBeginSendingToApplication:(NSString *)application
ale
- (void)documentInteractionController:(UIDocumentInteractionController *)controller didEndSendingToApplication:(NSString *)application
nigdy nie jest wywoływana i aplikacji nie jest przełączanie.
Cel App eksportuje swoje ZUM w następujących przypadkach:
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeIconFiles</key>
<array/>
<key>CFBundleTypeName</key>
<string>Migration DocType</string>
<key>CFBundleTypeRol</key>
<string>Shell</string>
<key>LSHandlerRank</key>
<string>Owner</string>
<key>LSItemContentTypes</key>
<array>
<string>com.mycomp.customstring</string>
</array>
</dict>
</array>
...
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<key>UTTypeDescription</key>
<string>My custom UTI</string>
<key>UTTypeIdentifier</key>
<string>com.mycomp.customstring</string>
</dict>
</array>
Jak to nie działa, próbowałem również dodanie rozszerzenia niestandardowe. Wciąż jednak nie działałoby w ten sposób. Po dodaniu niestandardowego rozszerzenia do pliku przekazuję do DocumentInteractionController
i działa. Jednak lista aplikacji pokazuje wszystkie inne aplikacje obsługujące to samo rozszerzenie pliku bez względu na to, czy jest ono dostępne w UTI typu I.
Say Oświadczam 2 ZUM w 2 różnych zastosowań:
App1 with UTI1: com.mycomp.a with extension .abc
App2 with UTI2: com.mycomp.b with extension .abc
Kiedy wręczając plik do DocumentInteractionController i ustawienie ZUM do com.mycomp.a
będzie również pokazać APP2 jako ewentualnego stosowania jest w stanie obsłużyć plik .
zdefiniowałem ZUM z rozszerzeniem w następujący sposób:
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<key>UTTypeDescription</key>
<string>My UTI Type</string>
<key>UTTypeIdentifier</key>
<string>com.mycomp.a</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<string>abc</string>
<key>public.mime-type</key>
<string>application/abc</string>
</dict>
</dict>
</array>
będę naprawdę wdzięczny za pomoc, jestem trochę zakleszczony. Zatem znowu pytanie: Jak wysłać plik do aplikacji ze znanym UTI bez rozszerzenia lub o takim samym rozszerzeniu jak inne pliki, których nie chcę pokazywać aplikacji jako wyboru w DocumentInteractionController?
Dzięki
Znalazłem prostsze rozwiązanie. Kod z 'willBeginSendingToApplication:' może być już wykonany po pomyślnym wywołaniu otwartego menu, co wymazuje potrzebę zamiany metod! – Jan
Proszę podać kod dla tego. Próbowałem ustawić właściwość name, ale nie odzwierciedla to w aplikacji innej firmy. – slott
Tak, najbardziej pomocne byłoby szczegółowe zapisanie * rzeczywistego * rozwiązania. – buildsucceeded