2016-08-24 6 views
0

テーブルビューに追加する一連のフィールドのデータを含むカスタムPlistがあります。レイアウトは次のようである:TableViewのカスタムオブジェクトへのマッピング辞書

ルートアレイ
- セクション(アレイ)
---フィールド(辞書)
----フィールド名
---- HasError
--- - FIELDTYPE
---フィールド(辞書)
----フィールド名
---- HasError
---- FIELDTYPE

複数のセクションがあり、それぞれに複数のフィールドがあります。各フィールドは辞書であり、後でカスタムオブジェクトタイプにマップします。たとえば 'FieldObject'などです。

「FieldObject」にカスタムのinitWithDictionaryメソッドを作成して、各ディクショナリからモデルオブジェクトを作成することができます。私たちはこのような関連データ取得時点では

:私たちが何をしたいか

let tvDataPath = NSBundle.mainBundle().pathForResource("CandRegisterFields", ofType: "plist") 
self.tableViewData = NSArray.init(contentsOfFile: tvDataPath!) 

はその後、元のNSArrayデータに戻ってそれらを追加し、カスタムモデルオブジェクトにフィールドのすべての辞書をマップであります同じインデックスなどの新しいオブジェクト型。これを行う簡単な方法がありますか?

+0

なぜあなたは何かを配列に保ちたいのですか?それには理由がありますか?なぜすべてをマップし、それを配列で望ましいフォーマットにするメソッドを作成しないのですか? –

+0

@Lu_ - 実際には、モデルオブジェクトの配列がほしいだけです。他の配列は無視できます。だから我々は辞書の配列を持っている、我々はモデルオブジェクトの配列が欲しい。 – StuartM

+0

@ Lu_ - 私が持っている問題は、forステートメントループの構文です。私。配列の配列(またはデータのセクションの配列)から始めます。私はオブジェクトにマップするために、すべての辞書を見つけるためにセカンダリ配列のそれぞれをループしたい – StuartM

答えて

1

にオブジェクトを戻したいのですが、Fieldオブジェクトのクラスではなく構造体を使用できるように、ココアオブジェクトをネイティブのスワイプコレクション型に変換する方が良いのはなぜですか?例えば

struct Field 
{ 
    let fieldName: String 
    let hasError: Bool 
    let fieldType: String //Should actually most likely be an enum 
} 

extension Field 
{ 
    init?(dictionary: NSDictionary?) 
    { 
     guard let dictionary = dictionary, let fieldName = dictionary["FieldName"] as? String else { return nil } 
     let hasError = dictionary["HasError"] as? Bool ?? false 
     let fieldType = dictionary["FieldType"] as? String ?? "" 
     self.init(fieldName: fieldName, hasError: hasError, fieldType: fieldType) 
    } 
} 

は、あなたのFieldオブジェクトの構造体を作成します。 NSDictionaryFieldに変換するいくつかのinitメソッドがあります。

var sectionsArray = [[Field]]() 
for array in plistArray 
{ 
    guard let array = array as? NSArray else { continue } 
    let section = array.flatMap { Field(dictionary: $0 as? NSDictionary) } 
    sectionsArray.append(section) 
} 

plistのセクションを繰り返します。これらのセクションはそれぞれ、辞書の配列です。それらの辞書のそれぞれをFieldにマップすると、[NSDictionary][Field]にマップされます。その配列を別の配列に追加して、データの初期構造を保持することができます。

+0

正確には、ちょうど構文にいくつかのポインタがありがとう、ありがとう。私はNSArrayと同様に動作していたが、あなたの助けを借りて、感謝しました。 hasErrorなどの項目を変更できるように、フィールドモデルにクラスを使用しました。ありがとう – StuartM

関連する問題