0

所以我有一個應用程序,它可以在模擬器上正常運行,但不會在實際設備上運行。適用於iPhone模擬器,但不適用於電話

在運行時,它給了我下面的錯誤:

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;在表格視圖控制器中,表格在模擬器和手機上都保持空白(但不會崩潰)。

如果我把它拿出來,它會在模擬器上加載正確的數據,並在手機上崩潰。

Delegate/dataSource應該在Interface Builder中鏈接到哪裏?我嘗試將它鏈接到「視圖」到「文件的所有者」,並創建一個新的「視圖控制器」,沒有一個工作。

+0

此外,我甚至對[UITableView isEqualToString:]甚至被調用的位置感到困惑。 – Kevin 2010-12-06 02:08:40

回答

2

delegatedataSource都應該鏈接到File's Owner,這是視圖控制器類,它將表視圖聲明爲IBOutlet;這應該是擁有nib文件的相同視圖控制器。此外,該視圖控制器應實施UITableViewDelegateUITableViewDataSource協議。

添加一個@synthesize線回來,(除非你繼承UITableViewController,如在評論grahamparks指出!)確保這些連接是正確的,最後,確保你已經聲明瞭一個IBOutlet表格視圖,並在您的類和界面構建器之間正確連接。

+0

是的,代表和數據源鏈接到文件的所有者。表視圖有一個名爲tableView的IBOutlet。雖然我沒有看到在界面生成器中鏈接的位置。有一個叫做「視圖」的插座,我連接到文件的所有者。在FirstViewController下有我的tableView,但將它連接到表視圖似乎也沒有幫助。 – Kevin 2010-12-06 01:58:59

+0

你必須在你的視圖控制器頭文件中爲你的tableView聲明一個出口,用@property(nonatomic,retain)IBOutlet UITableView * tableView;`。然後,您應該會看到該連接在界面構建器中顯示。這有效嗎? – 2010-12-06 02:00:45

0

用NSZombieEnabled設置爲yes運行您的應用程序。請參閱http://www.cocoadev.com/index.pl?NSZombieEnabled以獲取關於它的說明以及如何設置它。我認爲你會發現應用程序現在會在模擬器中拋出一個異常,告訴你你正在向已發佈的對象發送消息。

根據您收到的錯誤消息,我期望罪魁禍首是一個NSString或NSMutableString對象。如果它是一個NSString,然後警告,NSString可以被幾個不同的對象共享,因此找出多餘的版本可能很難。

雖然不要害怕,但樂器在這方面的幫助非常大。這裏是一個鏈接,解釋如何使用工具來確切地找出您的對象被保留和釋放的位置,以便您可以追蹤哪個版本不合適。 http://www.markj.net/iphone-memory-debug-nszombie/

祝你好運!

1

找到了!

原來,這根本沒有問題。問題在於我的數據庫中的日期字段在我的手機上運行時始終爲零/零。

爲什麼?因爲創建的NSDate對象從未初始化並且保持爲零。

爲什麼?

因爲我的手機在2​​4小時內沒有正確解析am和pm。

經驗教訓!

相關問題