2017-04-17 35 views
2

Ich habe eine Profilklasse erstellt und versuche, dass dieser Viewcontroller Abrechnungsprofilobjekte aus den vom Benutzer bereitgestellten Informationen speichert und dann die Profile in der TableView in einer Liste unter einem vom Benutzer angegebenen Namen anzeigt. Ich habe dies mit Arrays versucht, aber ich habe beschlossen, dies zuzulassen, weil ein Wörterbuch vernünftiger erscheint, da ich den Profilnamen zum Schlüssel machen kann. Und haben Sie das in der Tabelle angezeigtSwift 3 Population TableView aus dem Wörterbuch?

Allerdings habe ich Probleme beim Bestücken der Tabelle mit den Profilen.

Jede Hilfe wäre wirklich sehr geschätzt und ich bin offen, irgendwelche Vorschläge zu versuchen. Ich werde ein Bild zur Verfügung stellen und den Code

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: Noch ein bisschen verwirrt, ich eine neue Datei mit dem folgenden Code erstellt und diese immer bin.

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

Tabellen zeigen geordnete Daten (d. H. Arrays) an. Wenn Ihre Daten im Wörterbuchformat vorliegen, müssen Sie sie irgendwie in ein Array konvertieren. Es ist naheliegend, die Wörterbucheinträge alphabetisch nach ihrem Schlüssel zu sortieren. –

+0

Würden Sie mir vorschlagen, einfach zu Arrays zu wechseln? Oder würde es andere Wege geben, dies zu zeigen? Danke für die Antwort @NicolasMiari –

+0

Nicht unbedingt. Sie müssen überlegen, welches Format für Ihre Daten am besten geeignet ist, und zwar auf der Grundlage Ihrer Verwendung in Ihrer gesamten App und nicht nur in der Tabellenansicht. –

Antwort

0

Was können Sie tun, ist ein Array-Index in Ihrem Wörterbuch verwenden. Sie können das Array über die Schlüssel-Array-Eigenschaft Ihres Wörterbuchs generieren. Hier habe ich nach dem Schlüssel sortiert, aber Sie sollten wahrscheinlich eine Schließung zur Verfügung stellen, um nach dem Profilnamen oder einem anderen Feld zu sortieren, das sinnvoller ist.

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

Wäre das für NSTableViews dasselbe? –

+0

Da ich auf OS X war, würde ich NSViewControllers anstelle von UI benötigen? –

+0

Nicht genau, müssen Sie es ändern, um die NSTableViewDataSource-Methoden zu verwenden, die unterschiedlich sind (UITableView ist zum Beispiel 1 dimensional, während NSTableView eine Zeile und eine Spalte hat), aber konzeptionell ist das gleiche: Ihre Daten werden in einem Wörterbuch gehalten und Sie haben ein Array von Schlüsseln in diesem Wörterbuch, das die Reihenfolge darstellt, in der die Tabelle die Daten anzeigt. –

Verwandte Themen