2017-09-12 5 views
0

Ich habe eine Sicht mit einer Tabelle darauf, auf jeder Tabellenzelle kann ich einige Daten hinzufügen, so dass ich es in Modal, die eigentlich eine andere Ansicht ist. In meiner modal habe ich diesen Codeschließen Modal Callback

@IBAction func closeModal(_ sender: Any) { 

     if let amountVal = amount.text { 
      if let amountInt = Int16(amountVal) { 
       let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 
       let activity = Activity(context: context) 
       activity.created_at = Date() as NSDate 
       activity.amount = amountInt 

       countedObject?.addToActivities(activity) 

       do { 
        try context.save() 
        navigationController?.popViewController(animated: true) 
       } catch let error { 
        NSLog(error.localizedDescription) 
       } 
      } 
     } 


     dismiss(animated: true, completion: nil) 
    } 

I-Kerndateneinheit und in der Nähe modal So aktualisieren, aber modal den ersten Blick nach dem Schließen nicht aktualisiert wurde, damit es nicht die Änderungen reflektiert ich bis zum Neustart des Simulators gemacht. In meinem ersten Blick habe ich diese

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

    override func viewDidAppear(_ animated: Bool) { 
     populateCountObjects() 
    } 

Dies funktioniert für einfache segues aber nicht für modal, was soll ich in diesem Fall benutzen?

+0

Ihr Problem ist, dass 'populateCountObjects()' ist nicht angerufen? –

+0

nicht wirklich, scheint wie viewDidAppear wird nicht aufgerufen, nachdem Modal geschlossen ist – maki

+0

Können Sie bitte Nachricht an diese Ansicht Controller über schwache Delegat übergeben, so dass es Populate Methode aufrufen. –

Antwort

0

Posible Duplikat: duplicate

Sie benötigen einen Delegierten mit einem speziellen Verfahren

protocol ModalDelegate { 
    func didCloseModal(); 
} 

In Ihrem modalen Controller-Klasse verwenden, um eine Instanz von ModalDelegate Protokoll erstellen. Und nennen ‚delegate.didCloseModal()‘ entlassen, bevor

dann Ihre Eltern Controller implementieren machen wird ModalDelegate Protokoll und implementieren die Funktion didCloseModal wie viewDidAppear

0

Ich denke, Ihre viewDidAppear Methode nicht erneut aufgerufen. Versuchen Sie NsNotification zu verwenden, um Ihre erste VC zu benachrichtigen, wenn der Kontext gespeichert und neu gezeichnet/aktualisiert/neu geladen wurde ... usw., was Sie wollen.

0

Lassen Sie das System die Arbeit für Sie erledigen. In diesem Fall erhalten Sie eine Benachrichtigung, wenn der Kontext gespeichert wird.

Wenn das für Sie nicht funktioniert, können Sie immer tiefer gehen und benachrichtigt werden, wenn ein Objekt geändert wird.

override func viewDidLoad() { 
    super.viewDidLoad() 

    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 

    let center = NotificationCenter.default 
    center.addObserver(self, selector: #selector(contextObjectsDidChange(_:)), name: .NSManagedObjectContextObjectsDidChange, object: context) 
} 

func contextObjectsDidChange(_ notification: Notification) { 
    populateCountObjects() 
} 
0

Also habe ich es in einer anderen Art und Weise tat, habe ich diese

static var sharedInstace : ViewController? 

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

und im Modal zu Viewcontroller nach Verfahren entlassen

ViewController.sharedInstace?.didCloseModal()