2012-06-01 5 views
9

Come posso definire un metodo che può essere chiamato da qualsiasi luogo, in ogni classe di viewcontroller?iOS: come definire i metodi pubblici?

Ho un metodo che mi porta un file JSON, e voglio che sia riutilizzabile, dal momento che ho diverse chiamate JSON sulla mia app.

Potete aiutarmi?

+0

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

+0

rooster117 è corretto. Ti stai riferendo a un metodo statico. Si prega di tenere presente che tutti i metodi sono pubblici in Objective-C. È tuttavia possibile "nascondere" un metodo o causare un avviso del compilatore dichiarando metodi in un'estensione di classe. Tuttavia, non sono veramente privati. –

risposta

6

È possibile aggiungere tramite una categoria:

EDIT

Creare un nuovo coppia di file .m .h e nel file .h:

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


@ end 

Poi nel. m file:

@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 

Dove sto solo supponendo che y tornerà un NSArray, puoi mettere qualsiasi metodo lì ed estendere tutti i controlli UIView. Il metodo bringJSON sarà disponibile per tutti i UIViewControllers e le sue sottoclassi.

+0

woooo sembra davvero un uomo stupendo. Farò un tentativo! – 88fsantos

+0

Come posso restituire il mio JSON, appena caricato? : S Se lo metto dentro de "dispatch_get_main_queue" si ottiene un errore. – 88fsantos

+1

vedere la modifica per favore –

4

Credo che stiate pensando a un metodo statico che sarebbe stato definito con il simbolo "+".

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

Poi si può chiamare ovunque con il nome della classe prima:

[YourClassName yourFunctionName:5]; 

Se è necessario disporre di una funzione che l'accesso di un oggetto che deve essere istanziati poi si vuole fare un Singleton modello.

2

Ho aggiunto la prima risposta in quanto è un modo di creare (essenzialmente) un altro oggetto con metodi che possono essere chiamati da qualsiasi file che include quell'oggetto.

Ricorda anche che l'obiettivo-c è anche semplicemente C. Puoi includere file .c inclusi che contengono semplicemente routine ANSI-C che possono essere chiamate anche.

+0

Vedo, il mio problema con i metodi delle classi è che, il mio ritorno sta sempre ricevendo un errore, dal momento che non può usare variabili di istanza. C'è un modo per usare le variabili di classe? Riguardo ai singleton, penso di doverlo leggere. I singleton sono diversi dai protocolli? Sono uscito dal frontend e sono in xcode da circa un mese. Quindi è un po 'difficile fare cose più complicate. Tks molto per l'aiuto di oyur ragazzi! – 88fsantos

+0

Si può sempre implementare anche oggetti C++. In questo modo è possibile fornire variabili protette/private solo con accesso alle funzioni. XCode ha la capacità di compilare oggetti C++ nel tuo codice Objective-C. Cercherò di trovare alcuni link, ma qui c'è un post SULL'oggetto (senza codice di esempio) su StackOverflow. http: // StackOverflow.it/questions/406753/how-well-is-objective-c-supported – trumpetlicks

+0

tks man! leggerò che – 88fsantos

3

Utilizzare un segno + prima del tipo di ritorno del metodo.

Ad esempio:

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

}