如何在每个视图控制器类中定义可以从任何地方调用的方法?
我有一个方法可以为我带来一个 json 文件,并且我希望它可以重用,因为我的应用程序上有几个 json 调用。
你能帮助我吗?
您可以通过类别添加它:
编辑
创建一个新的 .h .m 文件对并在 .h 文件中:
@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 及其子类。
我相信您正在考虑使用“+”符号定义的静态方法。
+ (String) yourFunctionName:(NSInteger)someValue .....
然后你可以先用类名在任何地方调用它:
[YourClassName yourFunctionName:5];
如果您需要一个函数来访问需要实例化的对象,那么您将需要执行单例模式。
在方法的返回类型之前使用 + 号。
例如:
+ (void) Name: (NSString *) str{
}
我加了第一个答案,因为它是一种创建(本质上)另一个对象的方法,该对象的方法可以从包含该对象的任何文件中调用。
还要记住,objective-c 也只是 C。您可以包含 .c 文件,这些文件仅包含也可以调用的 ANSI-C 例程。