1

私は、それぞれが車を表すさまざまなカードを持つ iPhone アプリケーションを開発しています。したがって、すべてのカードにはいくつかのインスタンス変数と 1 つの画像があります。私のクラス CarCard は、.plist ファイルから各車のデータをロードしています。各インスタンスに異なる名前を付けるために、ループ内に多くのインスタンスを作成したい。例えば:

CarCard *car1 = [[CarCard alloc] initWithSomeINfo: info];
....... *car2 ..........................................;

....... *carN ..........................................;

ここで、N は車の数です。問題は、N の数が毎回わからないことです。そのため、インスタンスをループにする必要がありますが、インスタンスに別の名前を付ける方法が見つかりませんでした。

4

3 に答える 3

2

オブジェクトのNSMutableArrayCarCard、はるかに優れた方法です。ループの外でインスタンス化します。

NSMutableArray *cardArray = [[NSMutableArray alloc] init];

次に、ループ内にオブジェクトを追加します。

[cardArray addObject:car];

これで、インデックスでそれらにアクセスできます。

// Card 9, numbering starts at 0
myCar = [cardArray objectAtIndex:8];

編集して追加

配列内の位置ではなく名前でカードを参照したい場合、名前が一意になる場合は、辞書を使用して名前でカードを参照できます。ループの外で辞書をインスタンス化します。

NSMutableDictionary *cardDictionary = [[NSMutableDictionary alloc] init];

次に、ループ内にオブジェクトを追加します。

[cardDictionary setObject:car forKey:cardName];

これで、名前でそれらにアクセスできます。

// Card with the key named "card9"
myCar = [cardDictionary objectForKey:@"card9"];

// Card with the key named "monkey"
myCar = [cardDictionary objectForKey:@"monkey"];
于 2011-04-22T15:07:26.283 に答える
0

NSMutableDictionaryを作成し、それを設定できます。作成する必要のある値の数が(plistから)すでにわかっていると仮定すると、次のように記述できます。

for (int count = 1; count <= totalCars; count++)
     [carDict setObject:[[CarCard alloc] initWithSomeInfo:info] forKey:[NSString stringWithFormat:@"car%d", count]];

次に、任意の番号のオブジェクトを取得できます。

CarCard someCard = [carDict objectForKey:[NSString stringWithFormat:@"car%d", selectedNumber]];

または、NSDictionaryのallValuesメソッドを使用して、値の配列を取得することもできます。

NSArray *allCards = [carDict allValues];
于 2011-04-22T15:09:07.863 に答える
0

CarCard のインスタンスを作成し、単純に配列に追加してみませんか? N が何であるかを知っていれば、ループは非常に単純です。

NSMutableArray *carCards = [[NSMutableArray alloc] initWithCapacity:N];
for(int i=0; i<N; i++) {
    NSDictionary *car = [NSDictionary dictionaryWithContentsOfFile:<plist-i>];
    CarCard *carCard = [[[CarCard alloc] initWithSomeInfo:car] autorelease];
    [carCards addObject:carCard];
}

このようなもの。これは役に立ちましたか?

于 2011-04-22T15:07:23.473 に答える