10

如何在每个视图控制器类中定义可以从任何地方调用的方法?

我有一个方法可以为我带来一个 json 文件,并且我希望它可以重用,因为我的应用程序上有几个 json 调用。

你能帮助我吗?

4

4 回答 4

6

您可以通过类别添加它:

编辑

创建一个新的 .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 及其子类。

于 2012-06-01T15:59:46.907 回答
4

我相信您正在考虑使用“+”符号定义的静态方法。

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

然后你可以先用类名在任何地方调用它:

[YourClassName yourFunctionName:5];

如果您需要一个函数来访问需要实例化的对象,那么您将需要执行单例模式。

于 2012-06-01T15:40:10.593 回答
3

在方法的返回类型之前使用 + 号。

例如:

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

 }
于 2013-02-23T14:28:46.750 回答
2

我加了第一个答案,因为它是一种创建(本质上)另一个对象的方法,该对象的方法可以从包含该对象的任何文件中调用。

还要记住,objective-c 也只是 C。您可以包含 .c 文件,这些文件仅包含也可以调用的 ANSI-C 例程。

于 2012-06-01T15:43:56.593 回答