2015-05-27 9 views
5

Questo accade molto raramente. Ecco l'ultima riga della traccia dello stack:dispatch_group_leave crash in swift

0 libdispatch.dylib    0x0000000197a85a9c dispatch_group_leave + 48 

dispatch_group_leave viene chiamato in una chiusura completa che viene richiamato in questo modo:

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() 

Così abbiamo spedizione verso un thread in background, eseguire un HKStatisticsCollectionQuery, e quindi chiama una chiusura del parametro funzione chiamata completa. Inside complete è dove viene chiamato il dispatch_group_leave e si verifica l'arresto anomalo.

Tutte le idee sono più apprezzate! Grazie!

risposta

12

Se la chiamata dispatch_group_leave non è bilanciata con dispatch_group_enter, potrebbe verificarsi un arresto anomalo.

+0

Interessante. Ho un accesso prima che venga chiamata la prima chiusura. hmmm. – jestro

+0

Penso che sia stato questo. Alcune foglie venivano chiamate troppo velocemente. Spostato tutte le entrate e la notifica a prima che le foglie possano essere chiamate. Grazie! – jestro

+0

@mustafa c'è un modo per evitare il caso di chiamare dispatch_group_leave più del dovuto? Ad esempio, per casi che non posso dire con certezza che il blocco di completamento - di cui è chiamato il dispatch_group_leave - non verrà chiamato più di una volta? – ofer2980