2011-07-29 15 views
0

コントローラクラスを使用するobjective-cプロジェクトがあります。これは、IBOutlets経由でインタフェースビルダーとインターフェースします。ココアインタフェースビルダーコントローラメソッドへのアクセス

私の理解は、コントローラがオブジェクトとしてインターフェイスビルダに追加されたように、ユーザーインターフェイスを読み込んで初期化されることです。次に、コントローラのゲッターメソッドを使用してIBOutletフィールドにある値を返すことをお勧めします。

だから、私はいくつかのコードで何を意味するかを明確にするために、ここに私のコントローラインタフェース/実装だが:

@interface controller : NSObject { 
@private 
IBOutlet NSTextField *name; 
} 
-(NSString*) name; 
@end 

その後、私の実装では、私が持っている:

第三のクラスで
-(NSString*) name 
{ 
    return [name stringValue]; 
} 

、次のように書くことができます:

NSString blahblah = [controller name] and have the value of blahblah assume the value of whatever is in the controller's IBOutlet "name" field. 

これはうまくいけばいいと思います。私はこの方法で試してやると "意味論的な問題:メソッド '+名前'が見つかりません(戻り値の型は 'id'にデフォルト)"

なぜですか?コントローラオブジェクトは実際にどのように実体化されていますか、どこに、どのようにフィールドにアクセスしますか?

+0

をここでコードの行数よりも多くのエラーがあります - NSObjectのから直接継承するコントローラ、ポインタの誤った使用、IVAR名を不明瞭アクセサ名は、不正なMVCなどがあります。アップルの "The Objective-C Programming Language"をバックアップして読んでから、Cocoaアプリケーション開発の本/チュートリアルに進んでください。 – alexantd

答えて

2

コントローラをインスタンス化するには、[[controller alloc] initWithNibName:nibName bundle:nil]を使用する必要があります。

[コントローラ名]を使用するだけで、クラスメソッドが呼び出されます。また、それは* blahblah

をNSStringのする必要がありますが、このドキュメント読みください: http://developer.apple.com/library/ios/#referencelibrary/GettingStarted/Learning_Objective-C_A_Primer/_index.html#//apple_ref/doc/uid/TP40007594

+0

コントローラを正しくインスタンス化する場所はどこですか?アプリケーションデリゲートでは? –

+0

は、何をしようとしているか、ビューコントローラを階層に追加する場所によって異なります。私はalexantdのアドバイスを読んで、リンゴのドキュメンテーションとココアのチュートリアルを読むことをお勧めします – mets19

関連する問題