如何在每个viewcontroller类中定义一个可以从任何地方调用的方法?
我有一个方法可以为我带来一个json文件,我希望它可以重复使用,因为我的应用程序上有几个json调用。
你能帮助我吗?
答案 0 :(得分:6)
您可以通过类别添加它:
修改强>
在.h文件中创建一个新的.h .m文件对:
@interface UIViewController(JSON)
-(void) bringJSON;
-(void) fetchData:(NSData*) data;
@ end
然后在.m文件中:
@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
我假设您将返回NSArray,您可以在其中放置任何方法并扩展所有UIViewControllers。方法bringJSON将可用于所有UIViewControllers及其子类。
答案 1 :(得分:4)
我相信您正在考虑使用“+”符号定义的静态方法。
+ (String) yourFunctionName:(NSInteger)someValue .....
然后你可以先用类名调用它:
[YourClassName yourFunctionName:5];
如果您需要一个访问需要实例化的对象的函数,那么您将需要执行单例模式。
答案 2 :(得分:3)
在方法的返回类型之前使用+号。
例如:
+ (void) Name: (NSString *) str{
}
答案 3 :(得分:2)
我选择了第一个答案,因为它是一种创建(基本上)另一个对象的方法,该方法可以从包含该对象的任何文件中调用。
还要记住,objective-c也只是C.你可以包含.c文件,它们只包含可以被调用的ANSI-C例程。