我正在使用UIViewController(當然是一個子類)和一個文本字段,當內容發生改變時(發送到ViewController的contentsChanged:選擇器),該文本字段會發送一個動作。它通過發送contentsChanged:到IB的文件所有者來完成。 但是當我測試它,它說:「 - [NSCFString contentsChanged:]:無法識別的選擇器發送到實例」和十六進制實例指針。 我猜測出於某種原因,視圖控制器被移動到另一個指針和一個字符串被分配在那裏,但我不明白爲什麼。 有什麼建議嗎?NSCFString或UIViewController?
回答
聽起來像一個經典案例。請閱讀NSZombieEnabled以瞭解如何跟蹤這類問題。
不看代碼,它看起來像你正在調用contentsChanged:在文本字段的文本,而不是UIViewController子類。
不,我可以告訴你,我給它一個目標的代碼: [inputTextField addTarget:self action:@selector(contentsChanged :) forControlEvents:UIControlEventEditingChanged]; 它沒有理由稱它爲文本! – 2010-08-05 15:02:37
我有一個的UIViewController的一個子類完全相同的問題,這一塊的無害代碼:
- (void)viewDidLoad
{
NSLog(@"%@ %s %@", [self class], _cmd, answerButton);
[self.answerButton addTarget:self
action:@selector(getAnswerToQuestion:)
forControlEvents:UIControlEventTouchUpInside];
}
是,answerButton連接(這是一個IBOutlet),是的,- (IBAction)getAnswerToQuestion:(id)sender;
是正確的方法,但不喜悅。當我註釋掉viewDidLoad中,並取得了IB的連接,這表明在崩潰報告的故障發生在[UIControl sendAction:到:forEvent:]導致
objc_msgSend()選擇名稱:performSelector:withObject :withObject:
我無法證明它,但我懷疑在UIKit中有一處將綁定和addTarget轉換爲對performSelector的調用的錯誤。我打算先升級到iOS 4.01,看看是否能解決問題。
更新: 我不確定我的問題是否與Alexandre Cassagne相似,但爲了共享信息我不會刪除它。當我開始製作示例項目以提交錯誤報告時,我經常解決我的問題。是的,點擊進行answerButton調用getAnswerToQuestion:就像一個很好的小對象,一切都很好。
示例項目的子類UIViewController和我的真實項目的區別在於,第一個也作爲xib的文件所有者,而第二個只是其中一個視圖控制器。當我將getAnswerToQuestion移到實際項目中的文件所有者時,單擊answerButton按預期工作。所以,我的直覺是,問題出現在從綁定到performSelector的翻譯中並沒有那麼遙遠:問題在於響應者鏈。我認爲以編程方式或通過IB建立行動 - 目標鏈接將繞過響應者鏈,但顯然不是。
現在的問題是,Alexandre當然在他的問題中聲明他的contentsChanged:方法已經是文件所有者的一部分,這使得我的回答與問題無關。
謝謝我要升級到4.0.1並查看它是否有效。如果你在我之前做過,請讓我在這裏發帖告訴我它是否有效。 – 2010-08-05 16:58:12
我剛升級,很遺憾地告訴你它沒有工作。我用(void)替換(IBAction),這是根據文檔正確的iOS表單。我的最新崩潰報告: iPhone模擬器4.0(211.1),iPhone OS 4.0.1(iPhone/8A306) ***由於未捕獲的異常'NSInvalidArgumentException'而終止應用程序,原因:' - [NSCFString getAnswerToQuestion:]:無法識別的選擇器已發送到實例0x711fec0'。 我可以確認「實例0x711fec0」是在addTarget中指定的自我,即子類視圖控制器。 – 2010-08-06 13:18:25
您應該考慮在UITextField的文本更改時使用UITextFieldDelegate協議來回調。我沒有看,但這是我會做我的頭頂。
- 1. xcode中的NSString或NSCFString?
- 2. 從NSCFString
- 3. ASIFormDataRequest responseString返回nscfstring或nscfconstant字符串
- 4. UITableViewController或UIViewController
- 5. - [__ NSCFString objectAtIndex:]的cellForRowAtIndexPath:indexPath.row
- 6. NSDictionary變成NSCFString
- 7. NSCFString absoluteURL例外
- 8. UIView或UIViewController子類?
- 9. 比較NSCFString和NSCFBoolean
- 10. NSCFString內存泄漏
- 11. NSMutableDictionary轉換爲__ NSCFString
- 12. UIView或UIViewController的子類
- 13. 克隆或複製的UIViewController或UIView的
- 14. Objective C - [__ NSCFString _isAncestorOfFirstResponder]錯誤
- 15. NSCFString上的EXC_BAD_ACCESS代碼= 2
- 16. 解析NSCFString objectForKeyedSubscript錯誤
- 17. Iphone NSXMLParser NSCFString內存泄漏
- 18. Objective C NSCFString泄漏與NSMutableArrays
- 19. NSJSONSerialization生成NSCFString *和NSTaggedPointerString *
- 20. 收到錯誤[NSCFString了setBackgroundImage:forState:]:
- 21. 錯誤:'NSInvalidArgumentException',原因:' - [__ NSCFString text]:
- 22. NSCFString泄漏涉及的NSString
- 23. UIViewController不調用dealloc或調用兩次
- 24. 在Logos調整中顯示UIAlertView或UIViewController
- 25. 直接分配新的UIViewController或UIView?
- 26. UIViewController或UIView作爲UIWindow之上的hud?
- 27. 用的UIViewController(或的UITableViewController)的tableView財產
- 28. TVOS UIViewController沒有收到touchesBegan或touchesMoved
- 29. 比較實例或相同UIViewController類
- 30. Trasform(或套)的UIViewController到UINavigationController的
這絕對是第一次嘗試。如果你遇到殭屍,肯定存在內存管理問題。 – Chuck 2010-08-05 21:55:46
NSZombieEnabled是如何工作的?它有什麼作用? – 2010-08-06 12:52:10
如何搜索「NSZombieEnabled」以瞭解如何? http://www.google.co.uk/search?q=NSZombieEnabled – 2010-08-06 20:26:18