2016-04-02 2 views
0

Ich war auf der Suche nach einer Antwort für diese Frage, aber ich konnte nichts finden. Ich bin neu im schnellen Programmieren und auch im Stackoverflow, also hoffe ich, dass mir jeder helfen kann.Wie ein Array aus mehreren Textfeldern mit einer Eigenschaft zu sortieren

Ich versuche, eine App mit einem „EditViewController“ zu machen, die es mit mehreren Textfeldern für Namen, Vornamen usw.

Ich bin in der Lage dieser „Telefonbuch“ Einträge zu speichern, aber ich bin nicht in der Lage um das Array nach dem Eigenschaftsnamen zu sortieren.

der Bearbeitungsoberfläche ist nur dieser Code:

import UIKit 

class EditViewController: UIViewController { 
    @IBOutlet weak var vornameTextField: UITextField! 
    @IBOutlet weak var nameTextField: UITextField! 
    @IBOutlet weak var adresseTextField: UITextField! 
    @IBOutlet weak var hausnummerTextField: UITextField! 
    @IBOutlet weak var plzTextField: UITextField! 
    @IBOutlet weak var ortTextField: UITextField! 
    @IBOutlet weak var telefonnummerTextField: UITextField! 
    @IBOutlet weak var berufTextField: UITextField! 

    override func viewDidLoad() 
    { 
     super.viewDidLoad() 
    } 



    override func didReceiveMemoryWarning() 
    { 
     super.didReceiveMemoryWarning() 
    } 

} 

Der Code für die Textfelder Speichern ist:

import UIKit 

class Telefonbuch: NSObject, NSCoding 
{ 
    var name: String! 
    var vorname: String! 
    var beruf: String! 
    var telefonnummer: String! 
    var adresse: String! 
    var hausnummer: String! 
    var plz: String! 
    var ort: String! 

    init(name: String, vorname: String, beruf:String, telefonnummer: String, adresse: String, hausnummer: String, plz: String, ort: String) 
    { 
     self.name = name 
     self.vorname = vorname 
     self.beruf = beruf 
     self.telefonnummer = telefonnummer 
     self.adresse = adresse 
     self.hausnummer = hausnummer 
     self.plz = plz 
     self.ort = ort 
    } 

    required init?(coder aDecoder: NSCoder) { 
     name = aDecoder.decodeObjectForKey("name") as? String 
     vorname = aDecoder.decodeObjectForKey("vorname") as? String 
     beruf = aDecoder.decodeObjectForKey("beruf") as? String 
     telefonnummer = aDecoder.decodeObjectForKey("telefonnummer") as? String 
     adresse = aDecoder.decodeObjectForKey("adresse") as? String 
     hausnummer = aDecoder.decodeObjectForKey("hausnummer") as? String 
     plz = aDecoder.decodeObjectForKey("plz") as? String 
     ort = aDecoder.decodeObjectForKey("ort") as? String 
    } 


    func encodeWithCoder(aCoder: NSCoder) { 
     aCoder.encodeObject(name, forKey: "name") 
     aCoder.encodeObject(vorname, forKey: "vorname") 
     aCoder.encodeObject(beruf, forKey: "beruf") 
     aCoder.encodeObject(telefonnummer, forKey: "telefonnummer") 
     aCoder.encodeObject(adresse, forKey: "adresse") 
     aCoder.encodeObject(hausnummer, forKey: "hausnummer") 
     aCoder.encodeObject(plz, forKey: "plz") 
     aCoder.encodeObject(ort, forKey: "ort") 
    } 


    static func saveArray(data: [Telefonbuch]) 
    { 
     if data.count == 0 {return} 

     if let path = getFilePath() { 

      NSKeyedArchiver.archiveRootObject(data, toFile: path) 
     } 
    } 



    static func loadArray() -> [Telefonbuch] 
    { 
     if let path = getFilePath() { 

      if let result = NSKeyedUnarchiver.unarchiveObjectWithFile(path) as? [Telefonbuch] 
      { 
      return result 
      } 

     } 

     return [Telefonbuch]() 
    } 



    private static func getFilePath() -> String? 
    { 
     let pfd = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) 

     if let pfad = pfd.first { 
      return pfad + "Kontakte.bin" 
     }else { 
      return nil 
     } 
    } 

} 

Nun möchte Ich mag die Tableview machen, wo ich die Daten angezeigt, sortiert und mit Kopfzeile. Aber ich kann das [Telefonbuch] Array nicht nach Objektnamen sortieren.

import UIKit 

class OverViewController: UIViewController { 

@IBOutlet weak var tableView: UITableView! 
@IBOutlet weak var addButton: UIBarButtonItem! 
@IBOutlet weak var editButton: UINavigationItem! 


var kontaktListe = Telefonbuch.loadArray() 

override func viewDidLoad() 
{ 
    super.viewDidLoad() 
    tableView.dataSource = self 
    tableView.reloadData() 
} 


override func didReceiveMemoryWarning() 
{ 
    super.didReceiveMemoryWarning() 
} 


@IBAction func addButtonPressed(sender: AnyObject) 
{ 
    performSegueWithIdentifier("editSegue", sender: self) 
} 


@IBAction func returnToMainController(segue: UIStoryboardSegue) 
{ 
    if let scr = segue.sourceViewController as? EditViewController 
    { 
     let newvorname = scr.vornameTextField.text 
     let newname = scr.nameTextField.text 
     let newadresse = scr.adresseTextField.text 
     let newhausnummer = scr.hausnummerTextField.text 
     let newpostleitzahl = scr.plzTextField.text 
     let newort = scr.ortTextField.text 
     let newtelefonnummer = scr.telefonnummerTextField.text 
     let newberuf = scr.berufTextField.text 

     let newKontakt = Telefonbuch(name: newname!, vorname: newvorname!, beruf: newberuf!, telefonnummer: newtelefonnummer!, adresse: newadresse!, hausnummer: newhausnummer!, plz: newpostleitzahl!, ort: newort!) 

     kontaktListe.insert(newKontakt, atIndex: 0) 
     Telefonbuch.saveArray(kontaktListe) 
     tableView.reloadData() 
    } 
} 

    extension OverViewController: UITableViewDataSource 
{ 
    func numberOfSectionsInTableView(tableView: UITableView) -> Int 
{ 
    return 3 
} 


func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
{ 
    return kontaktListe.count 
} 


func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
{ 
    let cell = tableView.dequeueReusableCellWithIdentifier("ProtoCell", forIndexPath: indexPath) 
    let row = indexPath.row 
    cell.textLabel?.text = kontaktListe[row].name + " " + kontaktListe[row].vorname 
    cell.detailTextLabel?.text = kontaktListe[row].ort 

    return cell 
} 

func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool 
{ 
    return true 
} 


func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) 
{ 
    if editingStyle == .Delete 
    { 
     kontaktListe.removeAtIndex(indexPath.row) 
     tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) 
     tableView.reloadData() 
    } 
} 



extension OverViewController: UITableViewDelegate 
{ 
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 
{ 

    performSegueWithIdentifier("detailSegue", sender: self) 


} 

}

Kann jemand mir helfen, weil ich nicht eine Lösung finden.

Vielen Dank im Voraus.

Antwort

2

sollten Sie in der Lage sein, um das Array zu sortieren, mit:

kontaktListe.sort({ $0.name > $1.name })

+0

Sie ein absolutes Genie sind. Ich dachte, ich hätte es so gemacht, aber es hat nicht geklappt. Aber mit deiner Antwort hat es einfach perfekt funktioniert. Vielen Dank – Mikey

+0

Der Kürze wegen können Sie sogar das '()': 'kontaktListe.sort {$ 0. Name> $ 1.name}' weglassen – ColGraff

Verwandte Themen