2016-05-29 14 views

Antwort

0

Wenn Sie absolut sind, positiv sicher, dass Sie nicht bereits auf dem Haupt-Thread, können Sie dies tun:

var dates: (startDate: NSDate, endDate: NSDate)? 
dispatch_sync(dispatch_get_main_queue()) { 
    dates = someObject.dateFromSection(section) 
} 
+0

Dank für die Beantwortung, ich die Frage –

0

Warum Sie PerformSelectorOnMainThread verwenden? Sie hätten stattdessen dispatch_get_main_queue verwenden können.

PerformSelectorOnMainThread ruft eine Methode des Empfängers auf dem Hauptthread auf, die den Standardmodus verwendet.

dispatch_get_main_queue gibt die Standardwarteschlange zurück, die an den Hauptthread gebunden ist.

In Ihrem Fall sollten Sie Ihren Funktionsaufruf in dispatch_get_main_queue so setzen, dass Sie Ihre Rückgabewerte erhalten.

dispatch_async(dispatch_get_main_queue(), { 

     let ouptut = self.dateFromSection(YourDate) 
     // output contains your return value, which is a closure 
    }) 

Wenn Sie Rückruf wollen in einem anderen Teil des Codes reflektiert werden, können Sie eine lokale Instanz dieses Verschlusses schaffen und kann Rückgabewert es so zuweisen. Andernfalls können Sie eine globale Instanz erstellen und zuweisen, welche in anderen Klassen verwendet werden kann.

class YourClass 
{ 
     //MARK: Local Variables 

     var yourDateClosure : (startDate: NSDate, endDate: NSDate)? 

    func yourFunctionName() 
    { 
     dispatch_async(dispatch_get_main_queue(), { 

     self. yourDateClosure = self.dateFromSection(YourDate) 
     }) 
    } 
} 
+0

Dank aktualisiert haben zu reagieren, habe ich die Frage aktualisiert –

+0

Könnten Sie bitte den Inhalt der 'scrollToDate' hinzufügen und' dateFromSection', die uns geben mehr Klarheit darüber, was wir untersuchen. –

0

Sie sollen nicht performSelectorOnMainThread:withObject:waitUntilDone: in diesem Fall verwendet werden, da es nicht möglich ist, die Rückkehr von ihm zu erfassen. Verwenden Sie dispatch_async statt:

dispatch_async(dispatch_get_main_queue()) { 
    let dates = dateFromSection(section) 
} 
+0

danke für die Antwort, ich habe die Frage aktualisiert –