2012-03-18 49 views
0

我發現了一個奇怪的例外,在Xcode 4.2.1(啓用ARC項目),我不能追查到問題的根源。iOS版 - 古怪的例外

這是例外的樣子:

2012-03-18 22:19:32.855 Project[14225:707] +[UIPickerTableViewTitledCell isEqualToString:]: unrecognized selector sent to class 0x3f2bbec4 
2012-03-18 22:19:32.859 Project[14225:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[UIPickerTableViewTitledCell isEqualToString:]: unrecognized selector sent to class 0x3f2bbec4' 

什麼是UIPickerTableViewTitledCell?我想這是UIPickerView使用的一些內部類。但我並沒有在我的項目中的任何地方引用該類。

我的應用程序是設置爲在每個標籤導航控制器一個標籤欄的應用和這個特定的選項卡具有的tableview和pickerview。

+0

再次運行該應用程序,然後使用'PO',然後是列出的對實例沒有響應的實例。這是你期望的課程嗎?該類是否實現了'isEqualToString:',或者您是否需要獲取對象的屬性,然後檢查字符串? – theMikeSwan 2012-03-18 22:02:12

+0

運行'po'給我'UIPickerTableViewTitledCell' ... – 2012-03-18 22:36:55

+0

我沒有看到那個類的任何文檔的任何地方,但我猜想,是不是一個字符串,但可能有它的標題字符串屬性。我還沒有真正使用選擇器視圖,所以我真的可以說是尋找一個標題屬性或類似的東西。請記住,如果它是私人課程,Apple會直接拒絕您的應用程序(例如通過調用它)。 – theMikeSwan 2012-03-18 23:14:16

回答

3

這聽起來像你有一個過度釋放的對象。我在前ARC代碼中發現,發佈被稱爲一次。代碼聽起來好像它正在尋找一個NSString發送isEqualToString:to,而不是獲取已經釋放的NSString,它將獲得這個UIPickerTableViewTitledCell的隨機實例。

我將使殭屍。在Xcode 4.2.1中,您可以在菜單項Product > Edit Scheme中找到它。轉至Diagnostics選項卡。然後有一個Enable Zombie Objects複選框。這會讓你的過度釋放對象變成殭屍,所以你可以確切地找出是什麼對象導致你的崩潰。

我會讀蘋果文檔Technical Note TN2239: iOS Debugging Magic更多這方面的深入信息。整個文檔很棒,但你可以閱讀標題爲「殭屍!」的章節開始。和「更多殭屍!」

+0

這是真的。我最近遇到了一些奇怪的無法識別的選擇器異常。一個對象經常被釋放,所以他選擇了一個在另一個對象之前被分配的對象。那裏有趣的記憶管理。 – 2012-03-18 21:48:49

+0

以上輸出是我在選中「啓用殭屍對象」時得到的結果。 – 2012-03-18 22:35:01