iOS: How to define public methods?
Solution 1
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.
Solution 2
I believe you are thinking about a static method which would be defined with the "+" symbol.
+ (String) yourFunctionName:(NSInteger)someValue .....
Then you could call it anywhere with the class name first:
[YourClassName yourFunctionName:5];
If you need to have a function that access an object that needs to be instantiated then you will want to do a singleton pattern.
Solution 3
Use a + sign before the return type of the method.
For example:
+ (void) Name: (NSString *) str{
}
Solution 4
I plused the first answer as it is a way of creating (essentially) another object with methods that can be called from any file that includes that object.
Remember also that objective-c also is simply just C. You can have .c files included that are simply contain ANSI-C routines that can be called also.
88fsantos
Updated on July 09, 2022Comments
-
88fsantos almost 2 years
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?
-
88fsantos almost 12 yearsI see, My problem with the classes methods is that, my return is allways getting an error, since it can't use instance variables. Is there a way to use class variables? About the singletons, i think i've to read about it. Singletons are different from protocols? I camed from frontend, and i'm in xcode since about a month ago. So it's being a little hard to do more complicated things. Tks a lot for oyur help guys!
-
trumpetlicks almost 12 yearsYou could always implement C++ objects as well. This way you could provide protected / private variables with function access only. XCode does have the ability to compile C++ objects into your Objective-C code. I will try to find some links, but here is a post ABOUT the subject (without sample code) on StackOverflow. stackoverflow.com/questions/406753/…
-
88fsantos almost 12 yearsHow can I return my json, just when it's loaded? :S If i put it inside de "dispatch_get_main_queue" it get's an error.
-
88fsantos almost 12 yearsTKS A LOT! You solved my problem! It would be very hard to became a ios developer without this community
-
Kaan Dedeoglu almost 12 yearsI'm glad this helped you. Same here, I learnt more from the community than I learnt from books or online tutorials :)
-
Lion789 about 10 yearsHow is it then called in the .m file that is importing this .h file? can someone show how it is done please? Also, what in the code is added exactly in the .m file above since I see some code that might be specific to the json method