2014-03-13 32 views
0

在我的應用程序中,我看到不少崩潰與下面的堆棧跟蹤,在生產中。應用程序與[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)的崩潰。

如果任何人有一個想法,爲什麼發生這種情況,我會很高興聽到這件事:

+0

什麼是'BTAlert'? 'dismissAnimated:'是一個'BTDatePicker'方法而不是'BTAlert'方法。有你的問題,''dismissAnimated:'在'BTAlert'上被調用,而不是在'BTDatePicker'上。如果你沒有調用我不相信你的'BTAlert',那麼可以把它和框架的開發者一起提出來,你可以在'ejazz'的答案中找到它。 – Popeye

+0

從頭看起來像'dismissAnimated:'是BTDevicePicker上的一種方法,這可能就是你的意思。我的猜測是該方法是在錯誤的對象上調用的,因爲BTDevicePicker已經被釋放。我相信在類似的情況下我曾經見過這種症狀。我不知道的是,如果有什麼我可以做,以防止這種情況。 – Soren

+0

對不起,當寫這些時非常疲憊。 – Popeye

回答

0

它可能有一些做的一個委託函數,見https://github.com/nst/iOS-Runtime-Headers/blob/master/Frameworks/CoreBluetooth.framework/BTDevicePicker.h

它試圖調用該函數,我認爲。

其他可能的事情是,您正在使用的方法即> iOs6,並且崩潰發生在iOs 5.您能檢查嗎?

+0

謝謝。我已經用更多的上下文更新了我的答案。用於顯示選擇器的API非常封閉,除了從我的示例代碼中知道的內容外,沒有什麼可以做的。 – Soren

+0

我唯一能想到的就是它可能要在不同的線程上運行。在Apple的演示應用程序(https://developer.apple.com/library/ios/samplecode/EADemo/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010079)中,EADSessionController中存在警告。 h':'//注意:EADSessionController不是線程安全的,調用不同線程的方法會導致不可預知的結果 – ejazz

相關問題