2017-04-17 33 views
2

私はProfileクラスを作成しました。このviewcontrollerに、ユーザーから提供された情報から課金プロファイルオブジェクトを保存して、ユーザーが与えた名前のリストのTableViewにプロファイルを表示しようとしています。私は配列でこれを試みましたが、私はプロファイル名をキーにすることができるので、辞書がより合理的に見える理由のためにそれを行かせることに決めました。テーブルに表示されていますSwift 3 DictionaryからTableViewを読み込む?

しかし、私はプロファイルでテーブルにデータを入力するのに苦労しています。

ご協力いただければ幸いです。ご提案をお待ちしております。私は絵やコード

Picture

var dictionary = [String:Profile]() 

    let profile1 = Profile() 


    profile1.firstNameB = firstNameBill 
    profile1.lastNameB = lastNameBill 
    profile1.emailB = emailBill 
    profile1.phoneB = phoneBill 
    profile1.address1B = address1Bill 
    profile1.address2B = address2Bill 
    profile1.zipB = zipBill 
    profile1.cityB = cityBill 

    profile1.firstNameS = firstNameShip 
    profile1.lastNameS = lastNameShip 
    profile1.phoneS = phoneShip 
    profile1.address1S = address1Ship 
    profile1.address2S = address2Ship 
    profile1.zipS = zipShip 
    profile1.cityS = cityShip 

    dictionary.updateValue(profile1, forKey: pName) 

} 

UPDATEを提供します:まだ少し混乱し、私は次のコードを使用して新しいファイルを作成し、これを取得しています。あなたは何ができるか

enter image description here

class ProfileTable: NSViewController { 

@IBOutlet weak var tableView: NSTableView! 

var profiles: [String: Profile] = [:] 
var indices: [String] = [] 
override func viewDidLoad() { 
    indices = profiles.keys.sorted() 
} 
} 
extension ProfileTable: NSTableViewDataSource { 
func tableView(_ tableView: NSTableView, numberOfRowsInSection section: Int) -> Int { 
    return indices.count 
} 
func tableView(_ tableView: NSTableView, cellForRowAt indexPath: IndexPath) -> NSTableViewCell 
{ 
    let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: MyCell.self), for: indexPath) as MyCell 
    cell.profile = profiles[indices[indexPath.row]]! 
    return cell 
} 
} 
+1

表には、順序付けられたデータ(配列)が表示されます。データが辞書形式の場合は、何らかの形で配列に変換する必要があります。明らかにするべきことは、アルファベット順にキーで辞書項目をソートすることです。 –

+0

アレイ全体に切り替えることを提案しますか?それとも私がこれを表示するための他の方法がありますか?返信ありがとう@NicolasMiari –

+0

必ずしもそうではありません。あなたは、テーブルビューだけでなく、あなたのアプリケーションの周りのすべての用途に基づいて、データにとって最も便利なフォーマットを検討する必要があります。 –

答えて

0

辞書へのインデックスに配列を使用しています。辞書のキー配列プロパティから配列を生成できます。ここではキーでソートしていますが、プロファイル名や他のフィールドをソートするためのクロージャーを用意しておきましょう。

class V: UIViewController { 
     @IBOutlet weak var tableView: UITableView! 
     var profiles: [String: Profile] = [:] 
     var indices: [String] = [] 
     override func viewDidLoad() { 
      indices = profiles.keys.sorted() 
     } 
    } 

    extension V: UITableViewDataSource { 
     func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
      return indices.count 
     } 
     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
      let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: MyCell.self), for: indexPath) as MyCell 
      cell.profile = profiles[indicies[indexPath.row]]! 
      return cell 
     } 
    } 
+0

これはNSTableViewsと同じですか? –

+0

私はOS Xだったので、UIの代わりにNSViewControllerが必要でしょうか? –

+0

異なるNSTableViewDataSourceメソッドを使用するように変更する必要はありません(UITableViewは1次元ですが、NSTableViewには行と列があります)、概念的には同じです。データは辞書に保持されています。テーブルがデータを表示する順序を表す、その辞書へのキー配列。 –

関連する問題