0

おそらく簡単だと思う問題がありますが、頭を包み込むことができないようです。

NSDictionariesの配列からロードするテーブルビューがあります。各ディクショナリには、タイトル(行に表示)と、行が選択されたときにスタックにプッシュする必要があるビューコントローラを表す関連するnssstringがあります。つまり、行「A」を選択すると「aViewController」のインスタンスを初期化してスタックにプッシュする必要があり、行「B」を選択すると「bViewController」のインスタンスを初期化してスタックにプッシュする必要があります。

私は元々、すべての可能な値をdidSelectRowにハードコーディングしました。しかし、viewControllerを動的に動的に生成できるようにしたいと思っています。同様の問題のC++の例をいくつか見つけたので、以下のコードにたどり着きました。しかし、私はそれを正しく理解できないようであり、Objective-Cソリューションの正しい軌道に乗っているかどうかはわかりません。誰か考えがありますか?

動作していないdidSelectRowコードは次のとおりです。

Class cls = [selectedRow valueForKey:@"viewController"]; 
if (cls!= nil)
{
id myNewController = [[cls alloc] init];    
}


[[self navigationController] pushViewController:myNewController animated:YES];
[myController release];
4

1 に答える 1

7

実際のクラスまたはクラス名(NSStringとして)を辞書に保存していますか?

ディクショナリに格納している値がNSStringの場合、Class cls=someNSString;を割り当てることはできないと思います。

ただし、次のことはできます。

NSString *controllerClassName = [selectedRow valueForKey:@"viewController"];
if (controllerClassName != nil) {
     id myNewController = [[NSClassFromString(controllerClassName) alloc] init];
     [[self navigationController] pushViewController:myNewController animated:YES];
     [myNewController release];
}

また

NSString表現の代わりに、クラスをディクショナリに格納するだけです。

于 2010-10-31T17:18:29.147 に答える