ios - 在使用类别拆分大类时,类别提示未声明的选择器

标签 ios objective-c objective-c-category

我正在开发一个 View Controller ,它有一个又长又不漂亮的 View 设置方法。 为了简洁起见,此 View 设置代码已移至一个类别,仅用于 View 设置。

此类别引用原始 View Controller 中的私有(private)选择器,Xcode 显示警告:未声明的选择器“xyz:”

在我看来,我有这些选择,但没有一个看起来很好:

  • 留下警告,闭上眼睛!
  • 通过在头文件中声明来公开公开私有(private)选择器
  • 在原始 VC 头文件中声明第二个类别,作为第一个类别的子类别

我已经选择了最后一个选项,但我仍然有这种感觉,就像我必须去大便什么的。这里的最佳移动是什么?

最佳答案

您可以在类别实现中向私有(private)方法添加声明

所以在CustomViewController+ViewSetup.m

@interface CustomViewController (private)

// declare private methods and properties here which you know exist in CustomViewController.m

@end

但总的来说,我认为您对类别所做的操作是不必要的。您可以清理原始文件中的代码,而不需要类别文件来管理和维护。更不用说如果您更改了这些私有(private)方法签名中的任何一个而忘记在类别中更改它,编译器将不会警告您,而是在您尝试调用其中一个方法时看到崩溃。

关于ios - 在使用类别拆分大类时,类别提示未声明的选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24070338/

相关文章:

ios - 设置collectionView的起始位置

ios - 从父 View 向容器 View 传递数据

ios - 无限宽度水平 ScrollView 以显示图像

objective-c - 如何在 O(1) 内完成此任务

ios - CocoaPods UIImageView+AFNetworking.h 无法识别的选择器 setImageWithURLRequest

ios - 防止函数 instantiateViewController(withIdentifier :)) 的运行时崩溃

ios - UISearchController 导致黑屏 Swift 2.0

objective-c - 编译器会为类别中声明的属性自动合成一个 ivar 吗?

ios - 对于关联对象键, "static char const * const"比 "static const char"有什么优势?

ios - 如何将 Storyboard 中的 socket 连接到 UITableViewCell 类 Xcode 11