2015-05-27 4 views
5

Das passiert sehr selten. Hier ist die letzte Zeile des Stack-Trace:dispatch_group_leave crash in swift

0 libdispatch.dylib    0x0000000197a85a9c dispatch_group_leave + 48 

dispatch_group_leave in einem vollständigen Verschluss genannt, die wie folgt aufgerufen wird:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), 
       {() -> Void in 
        let query = HKStatisticsCollectionQuery(quantityType: quantityType, 
         quantitySamplePredicate: nil, 
         options: statisticOptions, 
         anchorDate: anchorDate, 
         intervalComponents: interval) 
        query.initialResultsHandler = { 

         complete() 

Also wir zu einem Hintergrund-Thread versenden, führen Sie eine HKStatisticsCollectionQuery und Rufen Sie dann einen Funktionsparameterabschluss namens complete auf. Inside Complete ist der Ort, an dem die dispatch_group_leave aufgerufen wird und der Absturz stattfindet.

Alle Ideen werden am meisten geschätzt! Danke!

Antwort

12

Wenn dispatch_group_leave Anruf nicht mit dispatch_group_enter ausgeglichen ist, kann ein Absturz auftreten.

+0

Interessant. Ich habe eine Eingabe, bevor die erste Schließung aufgerufen wird. Hmmm. – jestro

+0

Ich denke das war es. Bestimmte Blätter wurden zu schnell gerufen. Alle Einträge und die Benachrichtigung verschoben, bevor die Blätter aufgerufen werden können. Vielen Dank! – jestro

+0

@mustafa gibt es eine Möglichkeit, den Fall des Aufrufs dispatch_group_leave mehr als es sollte verhindern? für Fälle, in denen ich nicht mit Sicherheit sagen kann, dass der Completion-Block - in dem der Dispatch_group_leave aufgerufen wird - nicht mehr als einmal aufgerufen wird? – ofer2980