2016-08-09 156 views
2

Guten Morgen!Heute Erweiterung zeigt "unfähig zu laden" nach Schaltfläche Ereignis (iOS)

Ich habe ein "unable to load" -Problem in meinem iOS-Widget. Ich habe viel über die Meldung "unfähig zu laden" gelesen, aber nichts hat mein Problem gelöst. Ich bin mir nicht sicher, aber ich denke, mein Problem besteht darin, das Widget zu aktualisieren, nachdem ich meinen Inhalt geändert habe.

Mein Widget hat einen Button und ein Label. Wenn der Benutzer die Taste drückt, wird der Text vom Etikett geändert - in diesem Moment zeigt das Widget "unfähig zu laden". Nur eine Millisekunde nach dem Drücken der Taste.

import UIKit 
import NotificationCenter 

class TodayViewController: UIViewController, NCWidgetProviding { 

    @IBOutlet var segment_att: UISegmentedControl! 

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

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

    func widgetPerformUpdateWithCompletionHandler(completionHandler: ((NCUpdateResult) -> Void)) { 

     completionHandler(NCUpdateResult.NewData) 
    } 

    func widgetMarginInsetsForProposedMarginInsets(defaultMarginInsets: UIEdgeInsets) -> UIEdgeInsets { 
     return UIEdgeInsetsZero 
    } 

    @IBAction func button_ae(sender: AnyObject) { 
     let tableviewclass = TodayTableViewController() 
     tableviewclass.newData() 
    } 

} 

Wichtig ist, dass das Label in einer TableViewCell eines TableViewControllers angezeigt wird. Der TableViewController ist also innerhalb eines Containers in den ViewController eingebettet. Der Listener der Schaltfläche ruft die Methode newdata() der Datei des TableViewControllers auf.

Der Code ist wirklich einfach und grundlegend - so frage ich mich über das Problem in diesem einfachen Mechanismus. Ich hoffe ihr könnt mir helfen!

Danke an alle!

+0

fügen Sie 'self.reloadData()' in 'newData()' func hinzu –

+0

Zunächst einmal vielen Dank für Ihren Kommentar! Ich denke so etwas (Nachladen) fehlt. Aber Ihr Snippet funktioniert nicht, weil "Wert vom Typ TodayTableViewController (TableViewController) kein Mitglied" reloadData "" hat. Hast du eine Lösung? – Waldi

+0

überprüfen Sie besser TableView Integrationen und Überschreibungen für CellForIndexPath für Beispiel –

Antwort

0

Ihr Code geht davon aus, dass label1 gesetzt wurde, wenn newData() aufgerufen wird, auch unmittelbar nachdem der Konstruktor aufgerufen wurde.

Versuchen Sie, diese optional Verkettungs Syntax stattdessen verwenden, die leise scheitern, wenn die Eigenschaft null ist:

import UIKit 
import NotificationCenter 

class TodayTableViewController: UITableViewController, NCWidgetProviding { 

    @IBOutlet var table: UITableView! 
    @IBOutlet var label1: UILabel! 

    var meldung: String = "test"  // <-- meldung is property 

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

    func init() { 
     label1?.text = melding  // <-- optional chaining 
    } 

    func newData() { 
     melding = "new test"   // <-- set the class property 
     label1?.text = meldung  // <-- optional chaining 
    } 

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

} 

und stattdessen newData() aufzurufen, können Sie stattdessen setzen nur die meldung Eigenschaft, zB:

tableviewclass.meldung = "new test" 

als viewDidLoad() wird von der Unterkunft kümmern die UILabel Text der Einstellung

+0

Danke, das hat das Problem gelöst! – Waldi

+0

deklarieren Sie 'label1: UILabel!' Und greifen Sie mit '?' Darauf zu. Lesen Sie zuerst die Theorie über Optionale –