すべてのviewcontrollerクラスで、どこからでも呼び出すことができるメソッドを定義するにはどうすればよいですか?
私は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を返すことを想定している場合は、そこに任意のメソッドを配置して、すべてのUIViewControllerを拡張できます。メソッドbringJSONは、すべてのUIViewControllerとそのサブクラスで使用できます。
「+」記号で定義される静的メソッドについて考えていると思います。
+ (String) yourFunctionName:(NSInteger)someValue .....
次に、最初にクラス名を付けてどこでも呼び出すことができます。
[YourClassName yourFunctionName:5];
インスタンス化する必要があるオブジェクトにアクセスする関数が必要な場合は、シングルトン パターンを実行する必要があります。
メソッドの戻り値の型の前に + 記号を使用します。
例えば:
+ (void) Name: (NSString *) str{
}
そのオブジェクトを含む任意のファイルから呼び出すことができるメソッドを使用して (本質的に) 別のオブジェクトを作成する方法であるため、最初の回答を追加しました。
また、objective-c も単なる C であることを忘れないでください。呼び出すことができる ANSI-C ルーチンを単に含む .c ファイルを含めることができます。