2011-01-06 18 views
6

Presenté la impresión a través de AirPrint recientemente, pero quería no dejar de admitir versiones anteriores a 4.2 (obviamente). Lo hice antes para cosas como Game Center, etc. Lo que encontré particularmente extraño en este caso fue que tuve que enlazar débilmente a UIKit. La impresión no estaba contenida en su propio marco, lo que me permite ser más granular.Weak Linking Foundation y UIKit?

Esto simplemente no se sentía bien, aunque soluciona mi problema permitiendo que la aplicación se ejecute correctamente en todas las versiones.

En Apple's SDK Compatibility Guide Afirman:

Cuando se utiliza un marco que es disponibles en su destino de implementación, debe requerir que el marco (y no débilmente vincularlo).

UIKit es disponible, pero no clases, tales como UIPrintInfo, UIPrintInteractionController, etc.

Estoy en lo cierto, que parece extraño que enlazan débilmente tal marco básico? ¿Hay una mejor manera?

+0

le parecieron una respuesta a esto todavía? Parece que usar NS_CLASS_AVAILABLE está bien si aún no ha declarado el tipo de la clase y lo prueba primero. habiendo trabajado estos 2 enlaces: http://goo.gl/6yH4U y http://goo.gl/FiOd9 Todavía no he encontrado una solución adecuada. –

Respuesta

2

Hay una manera mejor. iOS 4.2 introdujo NS_CLASS_AVAILABLE para este propósito, pero existen algunas restricciones para su uso. Todos los detalles se enumeran en la documentación vinculada a continuación:

http://developer.apple.com/library/ios/#documentation/DeveloperTools/Conceptual/cross_development/Using/using.html

+0

Para hacer esto más específico: prueba en tiempo de ejecución usando [UIPrintInfo class], si esto no devuelve nada, estás en un sistema anterior y debes omitir/deshabilitar tus funciones de impresión. –

+0

@Steven Kramer: Tengo el mismo problema. Yo uso - (BOOL) canPrint { BOOL result = NO; \t Clase printClass = (NSClassFromString (@ "UIPrintInteractionController")); \t if (printClass! = Nil) { \t \t resultado = [UIPrintInteractionController isPrintingAvailable]; \t} resultado de devolución; }. Luego pruebo [autoimprimir] para activar/desactivar la funcionalidad de impresión, pero no funciona. Lo intenté en ipod touch con ios 3.1.3. Lo intenté también con NSClassFromString (@ "UIPrintInfo"), pero nada. ¿Alguna sugerencia? – Sefran2

+0

¿Qué quiere decir con "no funciona"? ¿Vinculación de errores? ¿Errores de enlace dinámicos? ¿O la prueba simplemente devuelve 'NO' donde debería devolver' SÍ' o viceversa? –