[英]Works in iPhone Simulator, but not on Phone
因此,我有一個可以在模擬器上正常運行的應用程序,但在實際設備上卻無法正常運行。
在運行時,它給我以下錯誤:
2010-12-05 19:58:32.006 Sports[4668:307] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableView isEqualToString:]: unrecognized selector sent to instance 0x800800'
關於結構的一些知識:我有一個標簽欄控制器,第一個視圖是UINavigationController。
該視圖中有一個UITableView。 可能相關或不相關的一件事是,如果我執行@synthesize tableView; 在表視圖控制器中,該表在模擬器和電話上均保持空白(但不會崩潰)。
如果我將其取出,它將在模擬器上加載正確的數據,並在電話上崩潰。
接口構建器中委托/數據源應鏈接到何處? 我嘗試將其鏈接到“視圖”到“文件的所有者”,並制作一個新的“ ViewController”,但這些都不起作用。
delegate
和dataSource
都應鏈接到File's Owner
, File's Owner
是將表視圖聲明為IBOutlet
的視圖控制器類; 這應該是擁有nib文件的同一視圖控制器。 此外,該視圖控制器應實現UITableViewDelegate
和UITableViewDataSource
協議。
再添加@synthesize
行(除非您將UITableViewController
子類化為注釋中的grahamparks指出!),確保這些連接正確,最后,確保已為表視圖聲明IBOutlet
,並將其正確連接到您的類和界面生成器之間
找到了!
事實證明,這根本沒有問題。 問題是在手機上運行時,數據庫中的日期字段始終為零/無。
為什么? 因為創建的NSDate對象從不初始化,而是保持為零。
為什么?
因為我的電話在24小時內,並且沒有正確解析上午和下午。
得到教訓!
在NSZombieEnabled設置為yes的情況下運行您的應用。 有關其說明以及如何設置的說明,請參見http://www.cocoadev.com/index.pl?NSZombieEnabled 。 我認為您會發現,該應用程序現在將在模擬器中引發異常,告訴您您正在向已發布的對象發送消息。
根據收到的錯誤消息,我認為罪魁禍首是NSString或NSMutableString對象。 如果這是一個NSString,則發出警告,該NSString可以由多個不同的對象共享,因此弄清楚額外發布的位置可能很困難。
不用擔心,Instruments在這方面提供了極大的幫助。 這是一個鏈接,該鏈接說明了如何使用Instruments准確地找到對象的保留和釋放位置,以便您可以查找不適合的釋放版本。 http://www.markj.net/iphone-memory-debug-nszombie/
祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.