他の実装ファイルのクラス メソッド内からインスタンス変数のプロパティ (タイトル、状態など) にアクセスするにはどうすればよいですか? @synthesize を試しましたが、うまくいきませんでした。より正確には; NSWindowController クラスの IBOutlets にアクセスする必要があります。
3 に答える
まず、この章を事前に読んでおく必要があります。
正確に知りたいことは何ですか。明らかに、インスタンスなしでインスタンス変数にアクセスすることはできません。クラス メソッドは、オブジェクト インスタンスなしでアクセスできる静的メソッド (メッセージ) です。あなたの質問を正確にできますか?
では、クラス インターフェイスでプロパティを宣言するだけです。インスタンス変数には IBOutlet というプレフィックスが付けられ、nib を使用して設定する必要があることを示します。たぶん、あなたはすでにそのすべてを知っています。その場合は申し訳ありません。
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MyClass.h file
*/
@interface MyClass
{
// instance vars
IBOutlet NSString *title; // Do you have this ? Should be bind in IB.
}
// and this to declare the accessors as public methods
@property (nonatomic, retain) NSString *title;
/*
other methods signature declaration
*/
@end
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MyClass.m file
*/
@implementation MyClass
@synthesize title; // allow to generate the accessors of your property
/*
methods implementation here
*/
@end
クラスをインスタンス化する場合は、アクセサー [myObjectOfMyClass title] を呼び出すだけです。おそらく、一意である必要があるオブジェクト インスタンスを簡単に取得するために最も使用され、便利なシングルトン デザイン パターンを参照してください。 あなたの Objective-C シングルトンはどのように見えますか?
ヴィンセント・ズゲブ
私は通常、すべてのクラスでアクセスする必要があるものの仲介として appcontroller を使用します... appcontroller がアプリケーションのデリゲートでもあると仮定します。どのクラスからでも、[NSApp デリゲート] を使用して appcontroller (アプリ デリゲート) にアクセスできます。
これを念頭に置いて、appcontroller がウィンドウ コントローラーのようなものをインスタンス化するようにします。次に、ウィンドウ コントローラーにアクセスする必要がある場合は、appcontroller でインスタンス変数を作成し、そのインスタンス変数のアクセサー メソッドを作成します。例えば:
appcontroller.h:
MyWindowController *windowController;
@property (readonly) MyWindowController *windowController;
appcontroller.m で:
@synthesize windowController;
次に、任意のクラスから、次を使用してウィンドウコントローラーのそのインスタンスにアクセスできます。
MyWindowController *windowController = [[NSApp delegate] windowController];