2011-08-08 6 views
2

、からメソッドの戻り値を取得します。ココア:私は自分自身をそれを把握するために狂ったようにしようとしてきたが、私は私のロープの終わりだ理由である私は、これは簡単です知っている別のクラス

- (IBAction)startAction:(id)sender { 
MyClass *anInstance = [[MyClass alloc] init]; 
NSLog(@"the name is:%@", [anInstance name]); 

あなたが見ることができるように、MyClassのは、「名前」の方法があり、このです:

- (NSString *)name { 
return [nameInput stringValue]; 
NSLog(@"stringValue = %@", [nameInput stringValue]); 
ユーザーがアクションを これを行うにはを想定しているボタンをクリックする

nameInputは、ユーザーが名前を入力し、startActionを呼び出すためにボタンを押すテキストフィールドです。このメソッドは、テキストフィールドから文字列値を返してログを作成する別のクラスで "name"を呼び出す必要があります。実際に何が起こっている

はスタートがログが言う押したとき「:(ヌル)の名前がある」ということです。そして、2番目のログは表示されません。私はそれが "名前"メソッドが呼び出されていないためだと仮定します。しかし、私は理由を知らない。私は、彼らが別々のクラスにあることを指定する必要がありますし、私はこのような「名前」メソッドを宣言:

- (NSString*)name; 

編集:私の周りにもう少しだますには、「名前」の方法は、それ自身のクラスから呼び出されたときにことを発見した後、ログはテキストフィールドにあったものを正しく示します。私は "名前"メソッド内に余分なログを入れて、それはであることがわかりますが、それが戻ってくる値はまだ(null)です。テキストフィールドの文字列を取得しないようにします。

編集:私はこれが重要なのかはわからないが、クラスの一つは、NSObjectののサブクラスで、他はNSViewControllerのサブクラスです。

詳細情報が必要な場合はお知らせください。 助けてくれてありがとう。メソッドから戻ると、この方法で起こる最後の事である私はあなたがNSLog()に関する警告を得ることはありません驚いている( - あなたはNSLog()コマンドの前に値を返すことはできませんname方法で

答えて

3

、機能が呼び出されない)。代わりにこれを試してみてください:nameInputが値を持っていない理由を、私は推測しているためのよう

- (NSString *)name { 
    NSLog(@"stringValue = %@", [nameInput stringValue]); 
    return [nameInput stringValue]; 
} 

あなたが正しくInterface Builderで正しくテキストフィールドを接続していません。

+0

今すぐ注文を確定すると、両方が表示されますが、再度リンクしても表示されます(無効) – Elbimio

2

私はnameInputが来ると、それはその値を取得する方法どこが十分に説明されていないので、これが正解であるか分かりません。しかし、私はそれがMyClassのインスタンス変数だと推測しています。 startAction:には、MyClassという新しいインスタンスが作成されます。 initメソッドがMyClassの場合、nameInputも初期化されますか? alloc initializes the instance variables to nil(または00.0、...タイプに応じて)以来、そしてあなたのinit方法はnameInputに他の値を代入していない場合startAction:は新しいMyClassインスタンスにnameを送信するとき、それはまだポイントでnilになります。ほとんどの場合、Objective-Cのnilにメッセージを送信するとnil(*)が返されるため、この場合はnameInputstringValueを送信するとnilが返され、ログにという出力が表示されます。詳細情報については

(*)、参照がmy answer to the question "Sending a message to nil?"

+0

これは意味があります。 nameInputはテキストフィールドであり、値はユーザー入力からの値です。 initメソッドに[nameInput init]を追加しましたが、まだ動作していません。 – Elbimio

+1

その行がすべて追加された場合、 'init'を' nil'に送るだけです。 「オブジェクトの割り当てと初期化」に関するXcodeのドキュメントを読んで(再)したいかもしれません。あなたがそうでないならば嫌がらせをするつもりはありませんが、あなたが最初の(Objective-C)プログラマのように見えます。 Smalltalkを最初に学ぶことを強くお勧めします。学ぶのは簡単ですし、Objective-Cはそれに基づいているため、後でObjective-Cの複雑さを緩和することができます。良い出発点は、Pharoの「今すぐ始めよう」をダウンロードすることです:http://www.pharo-project.org/ – Rinzwind

0

あなた

- (NSString *)name { 
return [nameInput stringValue]; 
NSLog(@"stringValue = %@", [nameInput stringValue]); 

MyClass *anInstance = [[MyClass alloc] init]; 

に属する、私は信じて、nameInputはそれの一部ではありません。

は、名前のメソッドにテキストフィールドのパラメータを追加してみてくださいと

- (IBAction)startAction:(id)sender { 
MyClass *anInstance = [[MyClass alloc] init]; 
NSLog(@"the name is:%@", [anInstance name:nameInput]); 

・ホープ、このことができますようにMyClassのにあなたのnameInputを渡すことができます。

関連する問題

 関連する問題