2016-04-02 7 views
0

私はこの質問の回答を探していましたが、何も見つかりませんでした。私は迅速なプログラミングでも新しいstackoverflowであるので、誰もが私を助けることができたら嬉しいです。1つのプロパティを持つ複数のテキストフィールドから配列を並べ替える方法

私は名前、prenameのための複数のテキストフィールドであり、「EditViewController」などでアプリを作ってみる

私は、この「電話帳」の項目を保存することができるよ、私はできませんよプロパティ名で配列をソートする。

編集インターフェースのみが、このコードされています

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() 
    } 

} 

コードテキストフィールドを保存するためには、次のとおりです。

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 
     } 
    } 

} 

今、私は並べ替え、私はデータを表示するテーブルビューを作成したいと思いますヘッダー付き。しかし、[Telefonbuch] Arrayをプロパティ名でソートすることはできません。

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) 


} 

}

私は解決策が見つからないので、誰も私を助けることができます。

ありがとうございます。

答えて

2

あなたはで配列をソートすることができるはずです:あなたは絶対天才です

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

+0

。私はこの方法でやろうと思ったが、うまくいかなかった。しかし、あなたの答えで、それはちょうど完全に働いた。ありがとうございました – Mikey

+0

簡潔さのために '()'を省略することもできます: 'kontaktListe.sort {$ 0.name> $ 1.name}' – ColGraff

関連する問題