所以我有一个在模拟器上运行良好的应用程序,但在实际设备上没有。
在运行时,它给出了以下错误:
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”,但没有一个工作。
答案 0 :(得分:2)
delegate
和dataSource
都应链接到File's Owner
,这是视图控制器类,它将表视图声明为IBOutlet
;这应该是拥有nib文件的相同视图控制器。此外,该视图控制器应实现UITableViewDelegate
和UITableViewDataSource
协议。
重新添加@synthesize
行,(除非你是UITableViewController
的子类,正如评论中的grahamparks所指出的那样!)确保这些连接正确,最后确保你已经为表视图声明了IBOutlet
,并在您的类和接口构建器之间正确连接。
答案 1 :(得分:1)
事实证明,这根本没有问题。问题是我的数据库中的日期字段在我的手机上运行时始终为零/零。
为什么呢?因为创建的NSDate对象从未初始化并保持为零。
为什么?
因为我的手机在24小时内没有正确解析上午和下午。
经验教训!
答案 2 :(得分:0)
将NSZombieEnabled设置为yes运行您的应用。有关它的说明以及如何设置,请参阅http://www.cocoadev.com/index.pl?NSZombieEnabled。我想你会发现应用程序现在会在模拟器中抛出异常,告诉你正在向已发布的对象发送消息。
根据您收到的错误消息,我预计罪魁祸首是NSString或NSMutableString对象。如果它是一个NSString然后警告,NSString可以被几个不同的对象共享,因此找出额外的版本可能很难。
从不担心,仪器在这方面做出了巨大贡献。这是一个链接,解释了如何使用Instruments找出保留和释放对象的确切位置,以便您可以找出哪个版本不合适。 http://www.markj.net/iphone-memory-debug-nszombie/
祝你好运!