【问题标题】:Works in iPhone Simulator, but not on Phone适用于 iPhone 模拟器,但不适用于手机
【发布时间】:2010-12-06 01:41:07
【问题描述】:

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

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

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 中将委托/数据源链接到哪里?我尝试将它链接到“视图”到“文件的所有者”,并制作一个新的“视图控制器”,但这些都不起作用。

【问题讨论】:

  • 另外,我对 [UITableView isEqualToString:] 的调用位置感到困惑。

标签: iphone uitableview uinavigationcontroller uitabbarcontroller


【解决方案1】:

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

重新添加 @synthesize 行(除非您将 UITableViewController 子类化,正如 cmets 中的 grahamparks 所指出的那样!)确保这些连接是正确的,最后,确保您已声明IBOutlet 用于表格视图,并在您的类和界面构建器之间正确连接。

【讨论】:

  • 是的,委托和数据源链接到文件的所有者。表视图有一个 IBOutlet,称为 tableView。不过,我看不到在界面生成器中将其链接到何处。有一个名为“view”的插座,我连接到 File's Owner。 FirstViewController 下有我的 tableView,但将其连接到 table view 似乎也无济于事。
  • 你必须在你的视图控制器标题中为你的 tableView 声明一个出口,@property (nonatomic, retain) IBOutlet UITableView *tableView;。然后,您应该会在界面生成器中看到该连接。这行得通吗?
  • 如果视图控制器是 UITableViewController 的子类(听起来确实如此),那么它有自己的内置 tableView 属性,通常不应覆盖。因此,请忽略 synthesize 指令。
  • 它已声明,并显示在 First View Controller 下的界面构建器中。但这会去哪里?
  • @graham,是的,它是 UITableViewController 的子类。忽略 synthesize 会导致它在 iPhone 上运行时崩溃,并出现我上面所说的错误。
【解决方案2】:

找到了!

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

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

为什么?

因为我的手机是 24 小时制的,没有正确解析上午和下午。

经验教训!

【讨论】:

    【解决方案3】:

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

    根据您收到的错误消息,我认为罪魁祸首是 NSString 或 NSMutableString 对象。如果它是一个 NSString 则警告,该 NSString 可能由几个不同的对象共享,因此可能很难确定额外释放的位置。

    不过,不要害怕,Instruments 在这方面提供了巨大帮助。这是一个链接,它解释了如何使用 Instruments 来准确找出您的对象被保留和释放的位置,以便您可以追踪哪个释放是不合适的。 http://www.markj.net/iphone-memory-debug-nszombie/

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多