0

さらにサブ配列で構成される配列があります

サブ配列の内容の概要を、各エントリの出現回数とともに TableView に表示したいと考えています。最善かつ最も簡単な方法は、中間ステップとして NSMutableDictionary を使用することであると判断しました。

実装で辞書を宣言します

@implementation ReviewViewController
{
NSMutableDictionary *dict;
}

私のメソッドでは、次のように初期化して使用します。

dict =  [NSMutableDictionary new];
[dict setObject:[Observation entryCount] forKey:[observedItem species]]; 

キーとオブジェクトの交換は、私が望むカウントとして意図的です。値は保持されますが、キーは上書きされるという事実を使用しているため、それらを交換すると無料でキュレーションが得られます。

動作します!ただし、メソッドが呼び出されるたびに、辞書は再初期化によって破壊されるため、最後に入力したものしか取得しません。それ以外の場所では範囲外です。

代わりにメソッド名の引数として渡すと、「「dict」のローカル宣言はインスタンス変数を非表示にします」というメッセージが表示されます。コードはすでに還元不可能なパーツの集合なので、

では、インスタンス化の正しい場所はどこですか?

ここで有意義な感謝として貢献したいのですが、そうする前に、そのような質問でばかげているように見えます。

4

1 に答える 1

0

通常、メソッドで初期化しますinit。ビューコントローラの場合、これは通常次のとおりです。

- (id)initWithNibName:(NSString*)nibName bundle:(NSBundle*)bundle {
    if ((self = [super initWithNibName:nibName bundle:bundle])) {
        dict = [NSMutableDictionary new];
    }
    return self;
}

「他のどこかで、範囲外」とはどういう意味かわかりません。これはインスタンス変数です。したがって、クラス内のすべてのメソッドのスコープ内にあります。

ちなみに、インスタンス変数にはアンダースコアプレフィックスを付けて名前を付けます(例:)_dict。これは一般的な規則であり、使用時にインスタンス変数であることを覚えておくのに役立ちます。

于 2013-02-09T11:23:47.267 に答える