适用于iPhone模拟器,但不适用于手机

时间:2010-12-06 01:41:07

标签: iphone uitableview uinavigationcontroller uitabbarcontroller

所以我有一个在模拟器上运行良好的应用程序,但在实际设备上没有。

在运行时,它给出了以下错误:

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'

关于结构:我有一个Tab Bar Controller,第一个视图是UINavigationController。

那里的视图有一个UITableView。可能有或没有关系的一件事是,如果我做@synthesize tableView;在表视图控制器中,表在模拟器和电话上保持空白(但不会崩溃)。

如果我把它拿出来,它会在模拟器上加载正确的数据,然后在手机上崩溃。

在Interface Builder中,delegate / dataSource应该链接到哪里?我尝试将它链接到“查看”到“文件的所有者”,并创建一个新的“ViewController”,但没有一个工作。

3 个答案:

答案 0 :(得分:2)

delegatedataSource都应链接到File's Owner,这是视图控制器类,它将表视图声明为IBOutlet;这应该是拥有nib文件的相同视图控制器。此外,该视图控制器应实现UITableViewDelegateUITableViewDataSource协议。

重新添加@synthesize行,(除非你是UITableViewController的子类,正如评论中的grahamparks所指出的那样!)确保这些连接正确,最后确保你已经为表视图声明了IBOutlet,并在您的类和接口构建器之间正确连接。

答案 1 :(得分:1)

发现它!

事实证明,这根本没有问题。问题是我的数据库中的日期字段在我的手机上运行时始终为零/零。

为什么呢?因为创建的NSDate对象从未初始化并保持为零。

为什么?

因为我的手机在2​​4小时内没有正确解析上午和下午。

经验教训!

答案 2 :(得分:0)

将NSZombieEnabled设置为yes运行您的应用。有关它的说明以及如何设置,请参阅http://www.cocoadev.com/index.pl?NSZombieEnabled。我想你会发现应用程序现在会在模拟器中抛出异常,告诉你正在向已发布的对象发送消息。

根据您收到的错误消息,我预计罪魁祸首是NSString或NSMutableString对象。如果它是一个NSString然后警告,NSString可以被几个不同的对象共享,因此找出额外的版本可能很难。

从不担心,仪器在这方面做出了巨大贡献。这是一个链接,解释了如何使用Instruments找出保留和释放对象的确切位置,以便您可以找出哪个版本不合适。 http://www.markj.net/iphone-memory-debug-nszombie/

祝你好运!