【问题标题】:What's a good way to split a tabbed UITableViewController into multiple files?将选项卡式 UITableViewController 拆分为多个文件的好方法是什么?
【发布时间】:2011-11-03 10:15:49
【问题描述】:

我已经实现了一个标签式UITableViewController。顶部有一些选项卡可以重新加载表格的内容。根据选定的选项卡,向用户显示不同的单元格。这一切都很好,但我最终得到了一个包含 3 个不同实现的源文件,并且变得有点庞大和混乱,即使使用编译指示来标记源代码的部分。

我曾考虑在运行时根据所选选项卡从字符串创建选择器,然后将 .m 文件拆分为几个重命名的方法,但随后是强制 @end 和文件结尾编译器告诉你缺少要实现的方法。

说真的,objective-c 似乎并不是为了将源代码拆分为多个文件而设计的。有没有可以用于此的设计模式?不知何故,我设法在主类的@end 之前使用#include <otherfile.m> 模拟所有这些,但它看起来并不漂亮。此外,如果我尝试将该文件包含到项目中,Xcode 会感到非常困惑,因为它会尝试单独编译它(至少我可以将文件包含在项目中并禁用它们包含在目标中)。

【问题讨论】:

    标签: objective-c ios architecture uitableview


    【解决方案1】:

    最后我使用了基本的预处理器,意思是包含和一些技巧。这是我所做的:

    1. 给定一个表格视图控制器filename.m,为每个选项卡/相关功能组创建一个filename_functionality.m 文件,并将方法放在那里。请注意,此文件中没有 @implementation@end#include 等,只有方法。
    2. 在您的 Xcode 项目中添加新文件,但请注意不要标记它们是任何构建目标所需的。如果您忘记了,请稍后选择文件并取消选中将它们包含在您的目标中的标记。这是为了避免 Xcode 试图单独编译这些 rouge 文件。
    3. 在主 filename.m 的末尾和 @end 标记之前,添加必要的 #include "filename_functionality.m",这实际上告诉预处理器将所有文件视为一个文件。
    4. 如果您的 main 文件正在调用 从属 文件的方法,请在 main 文件的顶部添加一个匿名接口并在那里声明您移至其他文件的方法的原型。

    此时,它起作用了!但是,Xcode 还是很烦人,尽管能够打开 从属 源代码文件,但它并没有正确解析它们,所以你不能使用快速导航栏在方法之间跳转,因为例子。同样,要解决这个更多的预处理器技巧:

    1. 在每个从属文件的开头,添加(哎呀,wiki格式被破坏了):

      #ifndef _INCLUDE_FILES

      @implementation BIEntity_view_controller

      #endif

    2. 在您的 从属 文件的末尾重复使用 ifndef 括起 @end

    3. main 文件的末尾和包含之前,定义 _INCLUDE_FILES

    这样做的目的是让 XCode 认为这是一个正确的实现文件,因此语法突出显示、完成和导航栏按预期工作。

    此设置的唯一小问题是 Xcode 没有正确报告从属文件中的行的错误,它只是指向包含并停留在那里。现在我必须右键单击行错误并选择 Reveal in Log,它会在正确的行号所在的位置显示完整的控制台消息。

    如果你不写糟糕的代码(呵呵)或使用外部文本编辑器,这不是一个大问题,但如果你习惯了快速修复键跳转,则会严重伤害从一个错误行到另一个错误行。

    通过这个技巧,我将一个 1151 行的文件拆分为四个大小,每个大小为 558、342、55 和 145 行。现在功能相关性更好,代码仍然可以作为同一个类的一部分工作,所以我不需要像使用类或接口这样的语言结构那样编写访问器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-29
      • 1970-01-01
      • 2020-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      • 1970-01-01
      相关资源
      最近更新 更多