-1

我将 MyClass 类定义为 UITableViewHeaderFooterView 的子类。在 iOS 6 类 UITableViewHeaderFooterView 存在,一切正常。在 iOS 5 类 UITableViewHeaderFooterView 不存在,并且 MyClass 没有在运行时注册。

在文件 'objc-runtime.m' 的评论中说: * 一个类在第一次出现在图像中时被认为是“未连接的”。* 它存储在unconnected_class_hash. 如果所有类的 * 超类都存在并且已经“连接”,那么新类 * 可以连接到它的超类并移动到class_hash* 正常使用。否则,类在unconnected_class_hash * 中等待,直到超类完成连接。

但是,当我将 UITableViewHeaderFooterView 类动态创建为子类 UITableHeaderFooterView 时,MyClass 未连接(+未调用加载),并且出现错误:Interface Builder 文件中的未知类 MyClass。 *由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[setValue:forUndefinedKey:]:此类与键 arrowImageView 的键值编码不兼容。”

如果我使用 UIView 作为 MyClass 的超类,我会收到错误: *由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“为标识符 (MyClass) 注册的 nib 无效 - nib 必须包含一个必须是 UITableViewHeaderFooterView 实例的顶级对象'

我看到了 PSTCollectionView 的实现(在 PSTRegisterClass 函数中使用 class_setSuperclass 函数),但我不明白这个解决方案。

在尝试注册 MyClass 之前如何动态创建 UITableViewHeaderFooterView?或者无论如何我该如何解决这个问题?

4

1 回答 1

3

答案是不依赖于您计划支持的最早操作系统版本中不支持的操作系统类。如果您绝对必须使用 UITableViewHeaderFooterView 类,请将您的部署目标移至 6.0。否则,重构您的代码以使用 iOS 5.x 中确实存在的基类,并在此基础上构建您的子类。

在我看来,尝试使用 Objective C 运行时修补以支持缺少的基类是浪费时间。

于 2013-10-24T14:26:49.667 回答