2012-05-09 11 views
0

私は40レベルのゲームをプログラミングしています。私はすべてのレベルデータを.plistに保存しています。これは素晴らしいですが、今では複数のレベルを実装しようとしています。スイッチ/ケースのような手作業でコーディングすることなく、レベルに基づいたシングルトンでプロパティを呼び出す方法を探しています。アクセスしているプロパティを動的に変更する方法

これはデータを取得するために使用するコードですが、わかりましたが、「dictionaryLevel1Data」プロパティはハードコードされています。

私は変数を設定し、シングルトンのプロパティをこのように私が動作しないことに基づいて呼び出すようにしたいと思います。私は「dictionaryLevel1Data」

NSString level = @"1"; 

int capacity = [[sharedDataManager.[NSString stringWithFormat:@"dictionaryLevel%@Data", level] objectForKey:@"typeWarrior"] intValue]; 

を交換しています注意してください、私はこれを実現できる方法上の任意の提案をいただければ幸いです。私はいつも手動で各レベルのスイッチ/ケースを設定できますが、レベルごとに40レベルと50以上の異なるオブジェクトタイプを使用すると、ラフになる可能性があります。ハードコーディングの値は嫌いですし、ジェネリックなクラスやメソッドを実行する変数を簡単に更新してコードを単純化するのが好きです。

答えて

0

このようにしたい場合は、Key-Value-Codingを使用して文字列からプロパティ値を取得できます。この記事では受け入れ答えは(非常に簡単)、それを使用する方法を示しています。Objective-C get a class property from string

それはこのようなものになり、あなたの仕事のために:あなたが使用することができます

int capacity = [[[sharedDataManager valueForKey:[NSString stringWithFormat:@"dictionaryLevel%@Data", level]] objectForKey:@"typeWarrior"] intValue]; 
+0

ありがとうございました!これは私が探していたものです!他の投稿とのリンクもありがとうございました。私が持っていた別の質問への回答につながります。乾杯! :0) – XBXSlagHeap

+0

もう1つ問題を解決できることを嬉しく思います。 –

1

なぜこのようにしないのですか。

2レベルのデータマップを使用します。

//sharedDataManager.levelData is a NSDictionary that contains lots of NSDictionarys 
NSDictionary *levelData = [sharedDataManager.levelData objectForKey:[NSString stringWithFormat:@"dictionaryLevel%@Data", level]]; 

int capacity = [levelData objectForKey:@"typeWarrior"] intValue]; 
+0

ありがとう...これは私のフォールバックオプションです。私はヨハネスからの提案が本当に好きです。そのような迅速な対応のために、簡単にもう一度感謝してください! – XBXSlagHeap

0

NSString level = @"dictionaryLevel1Data" 
SEL methodSelector = NSSelectorFromString(level); 
if ([sharedDataManager conformsToSelector:@selector(methodSelector)]) { 
    NSDictionary *levelData = [sharedDataManager performSelector:methodSelector]; 
    // Do whatever you need here 
} 

IをすべてのdictionaryLevelDataが合成され、ゲッターを名前として持つと仮定します。

(コンパイルしていないが動作するはずであることに注意してください)

+0

フィードバックいただきありがとうございます。これはあまりにもうまくいったかもしれません...前に私がヨハネスからの提案で見たことがなかったvalueForKeyのように。再度、感謝します。 – XBXSlagHeap

関連する問題