2012-06-01 7 views
9

どのようにすべてのviewcontrollerクラスのどこからでも呼び出せるメソッドを定義できますか?iOS:パブリックメソッドを定義する方法

私はjsonファイルを持ってきて、私はそれが私のアプリにいくつかのjson呼び出しを持っているので、私はそれが再利用可能であることを望むメソッドを持っています。

私を助けることができますか?

+0

シングルトンhttp://en.wikipedia.org/wiki/Singleton_pattern –

+0

rooster117正しいです。あなたは静的メソッドを参照しています。 Objective-Cではすべてのメソッドがpublicであることに注意してください。ただし、メソッドを「非表示」するか、クラス拡張のメソッドを宣言することによってコンパイラの警告を発することができます。それでも、彼らは本当に私的ではありません。 –

答えて

6

EDIT

新しい.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 

ここで、yあなたはNSArrayを返すでしょう、そこに任意のメソッドを配置し、すべてのUIViewControllerを拡張することができます。メソッドbringJSONは、すべてのUIViewControllerおよびそのサブクラスで使用できます。

+0

wooooそれは本当にawsome男のようです。私はそれを試してみましょう! – 88fsantos

+0

jsonがロードされたらすぐにそれを返すことができますか? :S私が "dispatch_get_main_queue"の中に入れた場合、エラーになります。 – 88fsantos

+1

編集を参照してください –

4

"+"記号で定義される静的メソッドについて考えていると思います。

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

次にあなたが最初のクラス名でどこにでもそれを呼び出すことができます。

[YourClassName yourFunctionName:5]; 

あなたがインスタンス化される必要があるオブジェクトにアクセスする機能を持っている必要がある場合は、あなたがシングルトンを行うことになるでしょうパターン。

2

最初の答えは、そのオブジェクトを含むファイルから呼び出せるメソッドを使って(本質的に)別のオブジェクトを作成する方法であるため、最初の答えを示しました。

また、objective-cは単にCにすぎないことにも注意してください。.cファイルには、呼び出すことができるANSI-Cルーチンが含まれていてもかまいません。あなたは、カテゴリを通してそれを追加することができ

+0

私は、クラスメソッドの私の問題は、インスタンス変数を使用することができないので、私のリターンは常にエラーを取得していることです。クラス変数を使用する方法はありますか? シングルトンについて、私はそれについて読むべきだと思います。シングルトンはプロトコルと異なりますか? 私はfrontendからcamedし、約1ヶ月前からxcodeに入っています。だからもっと複雑なことをするのは少し難しいです。 oyurヘルプの人のための多くのTks! – 88fsantos

+0

いつでもC++オブジェクトを実装することができます。この方法で、保護された/プライベート変数に関数アクセスのみを提供することができます。 XCodeには、C++オブジェクトをObjective-Cコードにコンパイルする機能があります。私はいくつかのリンクを見つけようとしますが、ここでStackOverflowのサンプルコードなしの記事です。 http:// stackoverflow。com/questions/406753/how-well-is-objective-c-supported – trumpetlicks

+0

tks man!私はそれを読むでしょう – 88fsantos

3

メソッドの戻り値の型の前に+記号を使用します。例えば

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

} 
関連する問題