マスター/ディテール Xcode テンプレートでは、(すべての UIViewController とそのサブクラスによって) グローバルにアクセスできるように関数を定義する場所はどこですか?
4 に答える
1つの可能性:UIViewController
メソッドを使用してでカテゴリを定義できます。したがって、UIViewController
今ではこの方法もあります。
別の可能性:aをサブクラス化し、UIViewController
そこにメソッドを記述します。そして、このカスタムビューコントローラからサブクラス化します。
編集:
また、私のMasterViewControllerはUITableViewControllerのサブクラスですが、DetailViewControllerはUIViewControllerのサブクラスです。両方をカスタムUIViewControllerにサブクラス化すると、MasterViewControllerはUITableViewControllerの継承を失います
UITableViewController
aをサブクラス化し、これからのandサブクラスと同じことを行うことができUIViewController
ます。
基本的な考え方は、テンプレートとしてUITableViewController
とを使用することです。UIViewController
すべてのアプリからアクセスできる appDelegate クラスにメソッドを作成できます。たとえば、AppDelegate.h では、このメソッドを次のように宣言しています。
-(void)myMethod;
AppDelegate.m で、次のように定義します。
-(void)myMethod
{
NSLog(@"myMethod is getting called");
}
他のクラス (Master または Detail など) から、次の方法で myMethod にアクセスします。
#import "AppDelegate.h"
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate myMethod];
クラスとメソッドを静的にします。マイナスの代わりにプラスを使用します+(void)methodName:param(ParamType *);
。
このクラスのオブジェクトをインスタンス化できないことに注意してください。手続き型プログラミングのようなものです。私は通常、異なるオブジェクトやビューで同じでも変化する値が必要な場合に使用します。しかし、私はそれが私にとってうまくいく方法ではありません。
オブジェクトのどのクラスがそれを呼び出すかを気にしないコードがある場合、おそらくメソッドではなく関数またはサブルーチンにカプセル化される可能性があります。
メソッドは、オブジェクトとそのクラスを認識する特殊なタイプの関数またはサブルーチンです。関数またはサブルーチンは、そうでないグローバル メソッドのようなものです。
追加: Objective C は C プログラミング言語のスーパーセットです。したがって、C の関数とサブルーチンは両方の言語で同じです。(または任意の) .c または .m ファイルに記述し、.h ファイルで宣言して、使用したい場所に含めることができます。メソッドと同様に、必要に応じてパラメーターを渡し、関数から戻り値を取得します (ただし、オブジェクトの固有のクラスとは無関係です)。
#2 を追加: ただし、メソッドにいくつかの NSStreams を認識させたい場合は、それらのストリームを含むモデル クラス (MVC パラダイム) のメソッドである必要があり、真にグローバルではありません。この Model オブジェクトを、それにアクセスする必要があるビュー コントローラまたはその他のクラスに渡します。