¿Cómo envío un archivo a una aplicación diferente sabiendo qué UTI es compatible con la aplicación? Digamos que el archivo no tiene extensión de archivo, pero conozco la UTI del archivo.UIDocumentInteractionController, no hay extensión de archivo pero UTI
He intentado lo siguiente:
// 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]
Se muestra la aplicación compatible, sin embargo, si lo selecciono, no va a cambiar de la aplicación. El delegado llama a la
- (void)documentInteractionController:(UIDocumentInteractionController *)controller willBeginSendingToApplication:(NSString *)application
pero
- (void)documentInteractionController:(UIDocumentInteractionController *)controller didEndSendingToApplication:(NSString *)application
Nunca se llama y la aplicación nunca está cambiando.
El objetivo App exporta su infección urinaria en lo siguiente:
<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>
Como esto no funcionó, también he intentado añadir una extensión personalizada. Aún así, no funcionaría de esta manera. Al agregar la extensión personalizada al archivo entrego al DocumentInteractionController
y funciona. Sin embargo, la lista de aplicaciones muestra todas las demás aplicaciones que admiten la misma extensión de archivo, independientemente del tipo de UTI que suministre.
Di Declaro 2 IU en 2 aplicaciones diferentes:
App1 with UTI1: com.mycomp.a with extension .abc
App2 with UTI2: com.mycomp.b with extension .abc
Al entregar el archivo a la DocumentInteractionController y ajuste de la UTI a com.mycomp.a
también se mostrará App2 como una posible aplicación de ser capaz de manejar el archivo .
que define una UTI con la extensión de la siguiente manera:
<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>
Realmente agradecería su ayuda, estoy un poco atascado. Entonces, de nuevo la pregunta: ¿cómo envío un archivo a una aplicación con UTI conocida sin extensión o con la misma extensión que otros archivos de los que no deseo mostrar las aplicaciones como opción en DocumentInteractionController?
Gracias
Encontré una solución más simple. El código de 'willBeginSendingToApplication:' ya se puede ejecutar después de que se haya llamado con éxito al menú Abrir en, ¡esto borra la necesidad de cambiar los métodos! – Jan
Proporcione el código para esto. He intentado configurar el nombre de la propiedad, pero no se refleja en la aplicación de terceros. – slott
Sí, una descripción detallada de la solución * real * sería de gran ayuda. – buildsucceeded