我已经实现了标签UITableViewController
。顶部有一些标签可以重新加载表格的内容。基于所选选项卡,向用户显示不同的单元格。这一切都很好,但我最终得到了一个包含3种不同实现的源文件,并且有点笨重和混乱,甚至使用编译指示标记源代码的部分。
我想过在运行时根据选定的选项卡从字符串创建选择器,然后将.m
文件拆分成几个放置重命名的方法,然后强制@end
和结束一个文件和编译器告诉你缺少要实现的方法。
真的,看起来Objective-c并不是为了通过几个文件来分割源代码。有没有可用于此的设计模式?不知何故,我设法在主类的#include <otherfile.m>
之前使用@end
模拟了所有这些,但它看起来并不漂亮。另外,如果我试图将该文件包含到项目中,Xcode会被混淆,因为它试图单独编译它(至少我可以在项目中包含这些文件并禁止它们包含在目标中)。
答案 0 :(得分:0)
最后,我采用了基本的预处理器,意思是包含和一些技巧。这就是我所做的:
filename.m
,为每个相关功能的选项卡/组创建一个filename_functionality.m
文件,并将方法放在那里。请注意,此文件中没有@implementation
,@end
,#include
等,只是方法。filename.m
的末尾和@end
标记之前,添加必要的#include "filename_functionality.m"
,这有效地告诉预处理器将所有文件视为单个文件。< / LI>
此时,它有效!但是,Xcode仍然很烦人,尽管能够打开从属源代码文件,但它没有正确解析它们,所以你不能使用快速导航栏在方法之间跳转,因为例。再次,解决这个更多的预处理器技巧:
在每个从属文件的开头,添加(yuck,wiki格式化已损坏):
#ifndef _INCLUDE_FILES
@implementation BIEntity_view_controller
#endif
在从属文件的末尾,重复ifndef
,并附上@end
。
_INCLUDE_FILES
。这样做会欺骗XCode认为这是一个正确的实现文件,因此语法高亮,完成和导航栏按预期工作。
此设置中唯一的次要因素是Xcode无法正确报告下级文件中的行的错误,它只是指向包含并保留在那里。现在我必须右键单击行错误并选择 Reveal in Log ,它会播放完整的控制台消息,其中包含正确的行号。
如果您不编写错误代码(hehe)或使用外部文本编辑器,这不是一个大问题,但如果您习惯使用快速修复键跳转会严重受伤从一个错误行到另一个。
通过这个技巧,我将1151行文件分成了四个大小分别为558,342,55和145行。现在功能更好地相关,代码仍然可以作为同一个类的一部分工作,所以我不需要像使用类或类接口这样的语言构造那样编写访问器。