2016-10-26 8 views
6

Używam UIFeedback Haptic Engine z Swift 2.3 jak:UIFeedback Haptic Silnik nazywa więcej razy niż zostało aktywowane

let generator = UINotificationFeedbackGenerator() 
generator.notificationOccurred(.Warning) 

i

let generator = UIImpactFeedbackGenerator(style: .Heavy) 
generator.impactOccurred() 

Dzisiaj dostałem nowy rodzaj błędu tak, i nie mogłem znaleźć problemu. Masz jakiś pomysł?

UIFeedbackHapticEngine _deactivate] called more times than the feedback engine was activated 

Szczegóły:

Fatal Exception: NSInternalInconsistencyException 
0 CoreFoundation     0x1863e41c0 __exceptionPreprocess 
1 libobjc.A.dylib    0x184e1c55c objc_exception_throw 
2 CoreFoundation     0x1863e4094 +[NSException raise:format:] 
3 Foundation      0x186e6e82c -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] 
4 UIKit       0x18cc43fb8 -[_UIFeedbackEngine _deactivate] 
5 UIKit       0x18cad781c -[UIFeedbackGenerator __deactivateWithStyle:] 

Odpowiedz

7

UIImpactFeedbackGenerator nie jest bezpieczeństwo wątków, więc upewnij się, że wywołanie generator.impactOccurred() synchronicznie, a nie w dispatch_async lub w innym wątku asynchronicznym.

+0

To jest właściwa odpowiedź, ale wydaje się trochę mylące, aby powiedzieć, aby nie używać jej w dispatch_async. Myślę, że masz na myśli to, że powinien je wywoływać tylko z jednego wątku. Może rzeczywiście zadzwonić do dispatch_async, aby dostać się do tego pojedynczego wątku. –