2010-02-10 12 views
6

Estoy tratando de implementar una subclase de administrador de ubicación sin conexión para permitirme pasar datos de encabezado al simulador de iphone, de forma similar al truco de eliminación de movimientos/acelerómetro. Desafortunadamente, según el CLHeading docs, todo es de solo lectura y no hay un inicializador que permita establecer el encabezado. ¿Hay alguna manera de forzar la creación de una instancia poblada de CLHeading?¿Es posible crear un objeto CLHeading en Objective C?

Respuesta

8

Desde Objective-C es un lenguaje de tipos dinámicos, puede crear su propia clase (por ejemplo, MyFakeHeading) y el tiempo que responde a todos los mismos selectores que CLHeading hace, puede simplemente echarlo como CLHeading y pasarlo como un parámetro en su lugar. Y, como solo necesita falsificar su propio código, ni siquiera necesita implementar toda la funcionalidad de CLHeading, solo las partes que está usando.

+0

Brilliant! ¡Gracias! – Shabbyrobe

1

Si usted está muy bien con el uso de métodos privados (aplicación privada o empresa) puede agregar CLHeading+Init.h a su proyecto:

@interface CLHeading (Init) 

- (id)initWithHeading:(double)heading accuracy:(double)accuracy; 

@end 

lo estoy usando en mi simulador de ubicación https://github.com/maciekish/MockingPlace

¡Advertencia! ¡Esto hará que tu aplicación sea rechazada desde App Store!

0

Otro enfoque es la subclase CLHeading y anula los getters y setters que le interesan.

Cuestiones relacionadas