私はObjective-C(主にcocoa / apple Foundationフレームワークを使用)に比較的慣れていませんが、長年のC ++プログラマーなので、私が達成しようとしていることを説明することから始めます。私のアプローチが最善ではない可能性が高いので、別のアプローチの提案を聞いてみたいと思います。
json形式のテキストファイルがあります。次の簡単な例を作成しました。
"section1" : {
"director" : "Sample Name 1",
"writers" : {
"name" : "Example Name 1",
"name" : "Example Name 2",
},
},
そして、このファイルを解析してこのクラスのインスタンスにいくつかの値を格納することを計画しているので、このファイル内のデータと一致させたいプロパティを持つクラスがあります。私のクラスヘッダーはおおよそ次のようになります。
@interface SongData : NSObject
@property (nonatomic, copy) NSString *director;
@property (nonatomic, copy) NSArray *writers;
@end
そのため、このjsonデータを正しいプロパティに保存するための最もクリーンで「データ駆動型」の方法を見つけようとしています。基本的に、データのjson「ディクショナリ」をループし、「キー」を使用してクラス内の正しいプロパティと照合し、そのプロパティに値を割り当てる方法が必要です。私が最初に試したのは、「キー」がjsonデータ内の適切なデータを検索するための実際のキーであり、「値」が正しいクラスプロパティへのポインターである辞書を作成したことです。このようなもの:
NSDictionary *descriptionDictionary = [[NSDictionary alloc] initWithObjectsAndKeys:
director, @"name",
writers, @"writers",
nil];
次に、jsonデータ(別のNSDictionaryに格納されている)をループし、「descriptionDictionary」の各キーを使用してjsonデータ内の適切な値を検索し、次に、に基づいて説明辞書の一致する「値」を使用するというアイデアでした。同じキー(私が望んでいたのは、実際のクラスプロパティへのポインタのようなものですか?)で、そのプロパティ値をjsonデータの値に設定します。おそらく例はそれをもう少し明確にするでしょう:-)。「jsonDictionary」が私のjsonデータを解析した結果であり、私はすでにセクション1内にいると仮定します。したがって、jsonDataNSDictionaryを構成するキーとdescriptionDictionaryNSDictionaryを構成するキーが1対1で一致するはずです。
[descriptionDictionary enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop) {
value = [jsonDictionary objectForKey:propertyName];
}];
これで、「value」は技術的にはクラスプロパティの1つを指し、関連するjsonデータをそれに割り当てたいと思います(つまり、director = @ "Sample Name 1")。私は自分がしていることに問題があることを知っています(ランダムなクラスプロパティへのポインタを逆参照して、未知のタイプの任意のオブジェクトを割り当てることはおそらくできないことを理解しています。すべてが一致することを望んでいます:-)が、例は、少なくとも私がやろうとしていることを示しているので、誰かが私にもっと良い方法を教えてくれます。