iOS: How to define public methods?

88fsantos picture 88fsantos · Jun 1, 2012 · Viewed 20.9k times · Source

How can I define a method that can be called from anywhere, in every viewcontroller class?

I have a method that brings me a json file, and i want it to be reusable, since i have several json calls on my app.

Can you help me?

Answer

Kaan Dedeoglu picture Kaan Dedeoglu · Jun 1, 2012

You can add it through a category:

EDIT

Create a new .h .m file pair and in the .h file:

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


@ end

Then in the .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

Where I'm just assuming that you'll be returning an NSArray, you can put any method there and extend all UIViewControllers. The method bringJSON will be available to all UIViewControllers and its subclasses.