2011-07-05 10 views
-1

NSMutableDictionaryオブジェクトを2つのクラス間で渡そうとしています。私は無駄に辞書を返すメソッドを追加しようとしました。NSDictionaryクラス間での継承

-(NSMutableDictionary*) getResponse 
{ 
return response; //where response is a dictionary that has keys and objects assigned 
} 

でも、辞書を他のクラスから引き出すことはできません。 「null」を返します。

+0

あなたの例では何も問題はありません...あなたのクラスに 'response'が定義されていれば、これが返されます。他のクラスがそれを保持していることを確認してください! –

+3

それには1つの問題があります:その名前。 Cocoaの命名規則に準拠するためには単に '応答 'でなければなりません。 'get'で始まるセレクタはコロンで終わっていなければなりません。また、引数は得られた値を格納するポインタでなければなりません。このメソッドはそのままですが、単に 'response'という名前にする必要があります。 –

答えて

2

自分自身を返さない方法を追加しようとしました。このメソッドは辞書を返すためです

-(NSMutableDictionary*) getResponse 
{ 
return response; 
} 

。メソッド自体を返すためには、メソッドのセレクタの実装をオブジェクトselfに依頼するか、Objective-CランタイムにMethod構造体を返すように依頼する必要があります。

しかし、それはあなたが実際にやりたいことではありませんか?

この方法でレスポンス辞書を返すことを意味するのであれば、それはまさにそれです。それは書かれているように正しいです(私の質問に私のコメントですでに説明した通り、その名前とは別に)。

...でも、データを他のクラスから引き出すことはできません。

このメソッドはデータオブジェクトを返すと主張しません。辞書オブジェクトを返すと主張する。データオブジェクトを返すと、それはバグです。

... voidを返します。

いいえ、それはNSMutableDictionary *を返します。 voidはタイプです。他の文脈では意味をなさない。

nil(オブジェクトなしのポインタ)が返されることを意味する場合は、返される応答辞書がありませんでした。このオブジェクトにそれがあるまで応答を要求しないでください。

レスポンスを保持するオブジェクトの委譲先をレスポンスを保持するオブジェクトの委譲者にし、応答が返ってきたときにレスポンスホルダがそのデリゲートにメッセージを送信できるようにすることができます。そのメッセージ。代案は、応答保持者がそれ自身を通過することであり、代理人は代理人メソッドの実装において応答辞書に応答辞書を尋ねる。

詳細情報:

+0

私は私の質問を編集して意味を成しました。しかし何らかの理由で、変数は保持されていないようです。私は自分のコードをチェックします。ありがとう。 – Baub

+0

@James Martinez:なぜあなたのコードにそれが保持される理由はありません。このアクセスでは保持しないので、呼び出し元が保持している場合にのみ保持されます。 'response'で辞書の元の所有権を参照しているのであれば、getterはそれを探す場所ではありません:setterを見てください。あるいは、変数やプロパティへの元の割り当て。 Objective-C言語のドキュメントで説明しているように、変数への代入とプロパティへの代入は非常に異なることに注意してください。 –

0

メソッドがnilを返す場合は、response変数がnilであることが原因です。この時点で初期化されていない可能性があります。 getResponseメソッド内でNSLog(@"Response: %@", response);を実行してみてください。コンソールが印刷するかどうか(null)、または有効なNSMutableDictionaryオブジェクトを参照してください。

+0

これはnullを出力しますが、すでに宣言されて使用されているので、情報がすでに含まれているはずです。 – Baub

+1

変数が設定されていないことを意味します。ここではメモリの保持は問題ではありません。このメソッドを実行する前に、init/setterが呼び出されていません。あるいは、init'dのオブジェクトではなく、新しいオブジェクトでそれを実行しています。 – David

+0

私はここに自分のコードを添付しています:http://stackoverflow.com/questions/6599955/cant-send-nsmutabledictionary-to-another-class – Baub