【问题标题】:Xcode iPhone SDK "Terminating app due to uncaught exception"Xcode iPhone SDK“由于未捕获的异常而终止应用程序”
【发布时间】:2010-02-06 21:09:20
【问题描述】:

我的 iPhone 应用程序有问题。

这是一个基于标签的应用程序。在其中一个选项卡中,我有一个表格视图。我已将其设置为从 PLIST 加载数据。

我的问题是,当我尝试构建和运行它时,应用程序要么崩溃,要么停留在黑屏并显示错误消息“由于未捕获的异常而终止应用程序”。

我查看了控制台,发现错误可能在这个字符串中:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
 return workouts.count;
}

(错误信息:)

2010-02-06 21:50:54.733 Mudo[52439:207] *** -[FirstViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x39101a0
2010-02-06 21:50:54.735 Mudo[52439:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[FirstViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x39101a0'
2010-02-06 21:50:54.736 Mudo[52439:207] Stack: (
    29344859,
    2569487625,
    29726779,
    29296246,
    29148866,
    4413562,
    4420938,
    4419935,
    3136474,
    3076985,
    3118420,
    3106975,
    55857840,
    55857263,
    55855302,
    55854394,
    2780921,
    2804616,
    2787027,
    2814133,
    37441233,
    29129600,
    29125704,
    2780777,
    2818051
)

构建应用不会产生任何错误。

请帮帮我?谢谢:)

【问题讨论】:

  • 您能向我们展示您在课堂上的@interface 声明吗?听起来您还没有将 FirstViewController 声明为 UITableViewController 子类,或者您没有正确设置表格视图的委托/数据源...
  • @interface FirstView : UIViewController { NSArray *workouts; } @end

标签: iphone objective-c xcode crash


【解决方案1】:

如果您查看异常的实际文本'NSInvalidArgumentException', reason: '*** -[FirstViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x39101a0',您可以看到问题的根源。在您的代码中的某处,您在 FirstViewController 上调用了 tableView:numberOfRowsInSection:,它没有实现该方法。

异常不会在编译时捕获,而是在运行时抛出。如果您不熟悉它们,可能需要阅读它们,因为它们是许多编程语言中相当重要的一部分。

http://en.wikipedia.org/wiki/Exception_handling

【讨论】:

  • 在这种情况下,我该如何实现呢?
  • 等一下,我的 FirstViewController 文件中没有任何代码.. 这和它有什么关系吗?
  • 当然与此有关。如果您已将 FirstViewController 设置为表的数据源/委托,那么它需要实现这些协议中的方法!
  • 是的。解决方案是要么实现该方法,要么首先不调用它。如果它被错误地调用(即你有另一个视图控制器是UITableViewController),那么不要调用它。但是,如果这应该是控制器,则您必须实现必要的方法。 developer.apple.com/iphone/library/documentation/UIKit/…
  • 我对此感到很困惑。我当前的代码所在的文件是 FirstView.h/m。我的该选项卡界面的文件是 FirstView.xib。 TableView 想要从中加载的文件是 FirstViewController.h/m。在界面生成器中,我连接了数据源并委托给“文件所有者”。我不明白为什么要从 FirstViewController.h/m 文件中显示它..?删除那个文件可以解决吗?我真的不需要它...
【解决方案2】:

我猜,因为 FirstViewController 是在 Xcode 中启动新的基于 Tab Bar 的应用程序时创建的标准示例类之一,您没有更改其超类或实现 UITabeViewDelegateUITableViewDataSource 的方法。

或者你已经在另一个类中实现了这些协议的方法,但是将 FirstViewController 设置为表视图的委托/数据源。

我们需要更多信息才能确定。

【讨论】:

  • 嗯,你是对的.. 我显然将 TableView 的委托和数据源设置为 FirstViewController.. 我该如何改变这个..?谢谢:)
猜你喜欢
  • 2018-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 2015-08-20
相关资源
最近更新 更多