2017-04-04 5 views
1

Ich verwende Realm, um Daten in mein UITableView zu laden, und ich habe ein UISegmentedControl als Titel in meiner Navigation eingestellt; aber wenn segmentedControlChanged ausgelöst wird, ändert sich nichts in meiner TableView.UITableView ändert sich nicht bei segmentedControlChanged

var productViewSegmentedControl: UISegmentedControl? = nil 
let realm = try! Realm() 
var allProducts : Results<Product>? 

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 

    if allProducts == nil { 
     allProducts = realm.objects(Product.self).sorted(byKeyPath: "basedescription") 
    } 

    if productViewSegmentedControl == nil { 
     let segmentedControlItems = ["List", "Brands", "Categories"] 
     productViewSegmentedControl = UISegmentedControl(items: segmentedControlItems) 
     productViewSegmentedControl?.selectedSegmentIndex = 0 

     self.navigationItem.titleView = productViewSegmentedControl 
     productViewSegmentedControl?.addTarget(self, action: #selector(OrderFormViewController.segmentedControlChanged(_:)), for:.allEvents) 
    } 

} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

} 

func segmentedControlChanged(_ segControl: UISegmentedControl){ 

    switch segControl.selectedSegmentIndex{ 
     case 0: 
      _ = allProducts?.sorted(byKeyPath: "basedescription") 
      tableView.reloadData() 

     case 1: 
      _ = allProducts?.sorted(byKeyPath: "itembrand") 
      tableView.reloadData() 

     case 2: 
      _ = allProducts?.sorted(byKeyPath: "itemtype") 
      tableView.reloadData() 

     default: break 

    } 
} 

Antwort

2

Warum tun Sie:

_ = allProducts?.sorted(byKeyPath: "basedescription") 

Sie ignorieren das Ergebnis so ändert sich nichts. Die Methode sorted aktualisiert den Absender nicht, sondern gibt eine neue Sammlung zurück.

Sie müssen allProducts aktualisieren, damit sich die Tabellenansicht ändert, wenn Sie sie neu laden.

Sie wollen wahrscheinlich (wenn dies von Realm unterstützt wird):

allProducts?.sort(byKeyPath: "basedescription") 

oder:

allProducts = allProducts?.sorted(byKeyPath: "basedescription") 

Und natürlich müssen Sie auch die anderen Fälle aktualisieren.

+0

Aus irgendeinem Grund, dachte ich, die Verwendung des Unterstrichs aktualisiert die Ergebnisse. Ich werde es auf diese Weise versuchen. – Sicypher

+0

Nein, die Verwendung des Unterstrichs dient dazu, den Compiler zu beruhigen, wenn er beschwert, dass Sie den Rückgabewert des Funktionsaufrufs ignorieren. – rmaddy

Verwandte Themen