2012-06-01 8 views
9

¿Cómo puedo definir un método que se pueda llamar desde cualquier lugar, en cada clase de viewcontroller?iOS: ¿cómo definir los métodos públicos?

Tengo un método que me lleva un archivo JSON, y yo quiero que sea reutilizable, ya que tengo varias llamadas JSON en mi aplicación.

¿Me puede ayudar?

+0

Singleton http://en.wikipedia.org/wiki/Singleton_pattern –

+0

rooster117 es correcto. Te refieres a un método estático. Tenga en cuenta que todos los métodos son públicos en Objective-C. Sin embargo, puede "ocultar" un método o causar una advertencia del compilador al declarar métodos en una extensión de clase. Aún así, no son realmente privados. –

Respuesta

6

Puede agregarlo a través de una categoría:

EDITAR

Crear un nuevo par de archivos .m .hy en el archivo .h:

@interface UIViewController(JSON) 
-(void) bringJSON; 
-(void) fetchData:(NSData*) data; 


@ end 

Luego, en el. m archivo:

@implementation UIViewController(JSON) 

-(void) bringJSON { 

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 

[NSData dataWithContentsOfURL:yourURL]; 

[self performSelectorOnMainThread:@selector(fetchData:) 
withObject:data waitUntilDone:YES]; 

}); 

} 


-(void) fetchData:(NSData*) data { 

//parse - update etc. 

} 


@end 

Donde estoy asumiendo que y Estarás devolviendo un NSArray, puedes poner cualquier método allí y extender todos los UIViewControllers. El método bringJSON estará disponible para todos los UIViewControllers y sus subclases.

+0

woooo parece realmente un hombre impresionante. ¡Voy a darle una oportunidad! – 88fsantos

+0

¿Cómo puedo devolver mi json, justo cuando está cargado? : S Si lo puse dentro de "dispatch_get_main_queue" se obtiene un error. – 88fsantos

+1

ver la edición por favor –

4

Creo que usted está pensando en un método estático que se define con el símbolo "+".

+ (String) yourFunctionName:(NSInteger)someValue ..... 

Entonces se le puede llamar en cualquier lugar con el nombre de clase primera:

[YourClassName yourFunctionName:5]; 

Si es necesario tener una función que acceder a un objeto que debe ser instanciado, entonces tendrá que hacer un producto único patrón.

2

I plused la primera respuesta, ya que es una forma de crear (esencialmente) otro objeto con métodos que pueden ser llamadas desde cualquier archivo que incluye ese objeto.

Recuerde también que el objetivo-C también es simplemente C puede tener archivos .c incluidos que son simplemente contiene rutinas ANSI-C que se pueden llamar también.

+0

Veo, Mi problema con los métodos de clases es que mi devolución siempre está obteniendo un error, ya que no puede usar variables de instancia. ¿Hay alguna manera de usar las variables de clase? Sobre los singletons, creo que tengo que leer al respecto. Singletons son diferentes de los protocolos? I CAMED de frontend, y estoy en Xcode desde hace un mes. Entonces, es un poco difícil hacer cosas más complicadas. ¡Muchas gracias por su ayuda chicos! – 88fsantos

+0

También podría implementar objetos C++. De esta forma, podría proporcionar variables protegidas/privadas con acceso a funciones solamente. XCode tiene la capacidad de compilar objetos C++ en su código Objective-C. Trataré de encontrar algunos enlaces, pero aquí hay una publicación ACERCA del tema (sin código de muestra) en StackOverflow. http: // stackoverflow.com/questions/406753/how-well-is-objective-c-supported – trumpetlicks

+0

tks man! Voy a leer que – 88fsantos

3

uso de un signo + antes de que el tipo de retorno del método.

Por ejemplo:

+ (void) Name: (NSString *) str{ 

} 
Cuestiones relacionadas