在我的應用程序中,我看到不少崩潰與下面的堆棧跟蹤,在生產中。應用程序與[BTAlert解僱動畫:]無法識別的選擇器崩潰
Application Specific Information:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[BTAlert dismissAnimated:]: unrecognized selector sent to instance 0x15f6d500'
Application Specific Backtrace 1:
0 CoreFoundation 0x2f57cf03 <redacted> + 130
1 libobjc.A.dylib 0x39d11ce7 _objc_exception_throw + 38
2 CoreFoundation 0x2f580837 -[NSObject doesNotRecognizeSelector:] + 202
3 CoreFoundation 0x2f57f12f <redacted> + 706
4 CoreFoundation 0x2f4ce0d8 __CF_forwarding_prep_0 + 24
5 CoreBluetooth 0x2f2a508f -[BTDevicePicker dealloc] + 358
6 libobjc.A.dylib 0x39d20b6b <redacted> + 174
7 ExternalAccessory 0x2fe93105 <redacted> + 56
8 ExternalAccessory 0x2fe8b057 <redacted> + 898
9 CoreFoundation 0x2f53ef39 <redacted> + 12
10 CoreFoundation 0x2f4b2de9 __CFXNotificationPost + 1720
11 Foundation 0x2fe9dcc5 -[NSNotificationCenter postNotificationName:object:userInfo:] + 72
12 AppSupport 0x32f7b3f7 -[CPDistributedNotificationCenter deliverNotification:userInfo:] + 62
13 AppSupport 0x32f7b511 __CPDNDeliverNotification + 276
14 AppSupport 0x32f7a8a3 <redacted> + 138
15 AppSupport 0x32f6efb3 <redacted> + 146
16 CoreFoundation 0x2f54783f <redacted> + 34
17 CoreFoundation 0x2f5477db <redacted> + 346
18 CoreFoundation 0x2f545fa7 <redacted> + 1406
19 CoreFoundation 0x2f4b07a9 _CFRunLoopRunSpecific + 524
20 CoreFoundation 0x2f4b058b _CFRunLoopRunInMode + 106
21 GraphicsServices 0x3441d6d3 _GSEventRunModal + 138
22 UIKit 0x31e0f891 _UIApplicationMain + 1136
23 myapp 0x00102647 __mh_execute_header + 30279
24 libdyld.dylib 0x3a20fab7 <redacted> + 2
在我的應用程序中,我顯示一個Bluetooth拾取器對話框,我猜測這個對話框關閉時會發生崩潰。我一直無法自己重現這次事故。我用於展示對話框的代碼非常簡單。
[[EAAccessoryManager sharedAccessoryManager] showBluetoothAccessoryPickerWithNameFilter:
[NSPredicate predicateWithFormat:@"SELF CONTAINS 'MyDeviceName'"]
completion:^(NSError *error) {
if (error) {
DLog(@"Failed to search for blueetoh devices or user cancelled %@", [error localizedDescription]);
} else {
[self userDidConnectToBTFromInApp];
}
}];
我的猜測是它有事情做與BTPicker被釋放的解僱方法被調用之前 - 但是,這只是一個猜測。
我已經看到幾乎任何類型的iPhone或iPad,以及幾乎任何版本的iOS 6和7(包括7.1)的崩潰。
如果任何人有一個想法,爲什麼發生這種情況,我會很高興聽到這件事:
什麼是'BTAlert'? 'dismissAnimated:'是一個'BTDatePicker'方法而不是'BTAlert'方法。有你的問題,''dismissAnimated:'在'BTAlert'上被調用,而不是在'BTDatePicker'上。如果你沒有調用我不相信你的'BTAlert',那麼可以把它和框架的開發者一起提出來,你可以在'ejazz'的答案中找到它。 – Popeye
從頭看起來像'dismissAnimated:'是BTDevicePicker上的一種方法,這可能就是你的意思。我的猜測是該方法是在錯誤的對象上調用的,因爲BTDevicePicker已經被釋放。我相信在類似的情況下我曾經見過這種症狀。我不知道的是,如果有什麼我可以做,以防止這種情況。 – Soren
對不起,當寫這些時非常疲憊。 – Popeye