2015-08-30 13 views
5

Cerco di aggiornare il contenuto della mia estensione widget di oggi ogni x secondi poiché cerco di realizzare qualcosa come un diashow. Perciò ho memorizzato tutti i dati richiesti usando i valori di default condivisi. Il caricamento dei dati dalla memoria funziona perfettamente ma il completamentoHandler dell'estensione:Come aggiornare il widget di oggi in rapido ogni x secondi

func widgetPerformUpdateWithCompletionHandler(completionHandler: ((NCUpdateResult) -> Void)!) { 
     //I do load the content here 
     completionHandler(NCUpdateResult.NewData) 
    } 

Viene chiamato solo una volta. Come posso implementare una funzione che dice che "newData" è disponibile ogni x secondi?

risposta

2

L'unico modo è NSTimer. È utile per chiamare il metodo ogni x secondi.

var timer : NSTimer? 

override func viewDidLoad() { 
    super.viewDidLoad() 

    timer = NSTimer.scheduledTimerWithTimeInterval(3, target: self, selector: "animateFrame:", userInfo: nil, repeats: true) 
} 

func animateFrame(timer: NSTimer) { 
    // Do something 
} 

Nel caso, è possibile chiamare animateFrame: ogni 3 secondi.

+0

Funziona perfettamente! Grazie! –

+0

@Floler Siete i benvenuti! – pixyzehn

1

C'è molto modo per farlo. Un modo è aggiungere un osservatore.

Ti piace questa

NSNotificationCenter.defaultCenter().addObserver(self, selector:"updateStuff", name: 
     UIApplicationWillEnterForegroundNotification, object: nil) 


func updateStuff() -> Void{ 

    // Update your Stuff... 
} 

Quindi la selezione chiama una funzione nella classe oggi widget.

Così il tuo Widget chiamerà la tua funzione quando il più ampio entrerà in primo piano.

Nota che il tuo widgetPerformUpdateWithCompletionHandler(completionHandler: ((NCUpdateResult) -> Void)) È lì per caricare il contenuto dal Web. Che non hai bisogno di un osservatore

Spero di poterti aiutare

Problemi correlati