【发布时间】:2010-04-12 11:47:54
【问题描述】:
根据 iPhone 应用程序编程指南(事件处理章节),如果我使用 UIView 或 UIViewController,我应该实现所有事件处理方法(即使它是空实现)。而且我不应该调用这些方法的超类实现。
为什么? (我在 Guide 和 Google 中搜索过,但找不到答案……或者只是无法很好地搜索)
【问题讨论】:
标签: iphone events event-handling
根据 iPhone 应用程序编程指南(事件处理章节),如果我使用 UIView 或 UIViewController,我应该实现所有事件处理方法(即使它是空实现)。而且我不应该调用这些方法的超类实现。
为什么? (我在 Guide 和 Google 中搜索过,但找不到答案……或者只是无法很好地搜索)
【问题讨论】:
标签: iphone events event-handling
来自guide:
这个准则的原因是 简单:处理的所有视图 接触,包括你自己的,期待 (或应该期望)收到完整的 触摸事件流。如果你阻止一个 UIKit 响应者对象从接收 触及某个阶段 事件,由此产生的行为可能是 未定义且可能不受欢迎。
【讨论】:
视图中有很多东西是由用户决定运行时间的……由它的委托方法……如果没有定义,你的应用程序可能会崩溃……
例如,如果您有一个应用程序并且您在其中使用 UITableView 并且如果您没有实现
tableView:cellForRowAtIndexPath:
它不会给您任何错误...但是当您运行应用程序以及包含 Tableview 的视图加载应用程序时,应用程序将崩溃 你会得到
* 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“UITableView 数据源必须从 tableView:cellForRowAtIndexPath: 返回一个单元格:”
因为应用程序不知道如何显示表格的单元格...
因此,UIView 和 UIViewController 的情况也是如此...如果未实现特定的委托方法,您的应用程序可能会在某些事件上崩溃(可能不是...)
【讨论】: