2016-05-09 14 views
1

Ich haue mir wegen dieses Problems eine Weile den Kopf. Ich präzisiere mein Szenario im Detail.Die Tabellenansicht wird nach dem Schließen des Popover nicht aktualisiert?

Ich habe eine Tabellenansicht, wo ich Daten mit einem Popover hinzufügen kann, das beim Klicken auf das "+" in der Navigationsleiste angezeigt wird. Ich bekomme die Werte aus dem Popover aber wo ich feststecke ist, werden die empfangenen Daten nicht in der Tabellenansicht wiedergegeben. Wenn ich hin und her gehe, wird es angezeigt. Versucht, den Tisch mit verschiedenen Möglichkeiten neu zu laden, aber nichts funktioniert.

Wenn Sie einen Geschmack von meinem Code möchte tun, Sie können es hier Data stored fails to display in the table view, in one to many relationship of core data?

Könnte jemand mein Problem lösen, ist Hilfe sehr geschätzt.

+0

Welches Nachladen verwenden Sie? Wenn du es anrufst bist du im Hauptthread? Wird cellForRow .. angerufen? Wenn dies der Fall ist, geben Sie die richtige Zelle zurück? Brauchen Sie mehr Informationen, um Ihnen zu helfen –

+0

In der ViewWillAppear-Methode 'Team Table View Controller' holen ich die Daten aus der Coredata. In der 'To-Add-Teams'-Submit-Methode (das ist eine Schaltfläche, auf die ich tippe, wenn ich die Werte im Popover gebe). Das Popover wird gelöscht, aber die Tabellenansicht wird immer noch nicht mit den neuesten Werten aktualisiert. Könnten Sie mir sagen, was ich sagen möchte? –

+0

Ich empfehle, den Code so zu konvertieren, dass er einen abgerufenen Ergebniscontroller verwendet (wie Sie dies für Members tun), und implementieren Sie die Delegate-Methoden, um die Tabellenansicht zu aktualisieren. – pbasdf

Antwort

3

Die Idee hier ist, eine Möglichkeit für den Popover-View-Controller Add Teams zu bieten, um dem Team-Tabellenansicht-Controller zu sagen, seine Tabellenansicht neu zu laden.

  1. Im Add-Team VC flink Datei definiert ein Protokoll:

    protocol AddTeamsDelegateProtocol { 
        func didAddTeam() 
    } 
    
  2. in Add-Team Klasse, fügen Sie eine neue delegate Eigenschaft, die von dieser Art:

    var delegate : AddTeamsDelegateProtocol? = nil 
    
  3. Rufen Sie in derselben Klasse die Delegate-Methode auf, wenn das neue Team gespeichert wird:

    @IBAction func submit(sender: AnyObject) { 
        let entity = NSEntityDescription.entityForName("Teams", inManagedObjectContext: managedObjectContext) 
        let team = Teams(entity: entity!, insertIntoManagedObjectContext: managedObjectContext) 
        team.teamName = teamNamePO.text 
        team.teamImage = teamImagePO.image 
        do{ 
         try managedObjectContext.save() 
        } catch let error as NSError{ 
         print("\(error), \(error.userInfo)") 
        } 
        self.delegate?.didAddTeam() 
        dismissViewControllerAnimated(true, completion: nil) 
    } 
    
  4. im Team Tabelle View-Controller, implementieren die didAddTeam() Methode:

    func didAddTeam() { 
        let request = NSFetchRequest(entityName: "Teams") 
        do{ 
         teamData = try managedObjectContext.executeFetchRequest(request) as! [Teams] 
        } catch let error as NSError { 
         print("\(error), \(error.userInfo)") 
        } 
        self.tableView.reloadData() 
    } 
    
  5. Stellen Sie sicher, dass das Team Tabelle View-Controller an das Protokoll

    class GroupTable: UITableViewController, NSFetchedResultsControllerDelegate, AddTeamsDelegateProtocol { 
    
  6. Bevor segueing (oder Präsentation entspricht) Das Add Teams Popover (ich konnte nicht sehen, wie das in deinem Code in der anderen Frage gemacht wird), setze den Delegierten des Teams Teams hinzufügen:

    addTeamsVC.delegate = self 
    
+0

Ich habe es durch NSNotificationCenter, trotzdem danke für die Hilfe :) –