将委托方法放入一个类别中

Pau*_*tin 18 delegates split coding-style objective-c ios

到目前为止我开发了一些应用程序.现在我正在写一个新的,在这个项目中我想保持代码非常干净,所以很容易找到方法.
我想从UIViewControllers开始,其视图具有UITableView作为子视图.我希望有一个文件名为DetailViewController所有直接属于它的函数.另一个名称DetailViewController+Protocols应该包含上面类的类别和UITableView的所有这些委托方法.

可以这样做吗?我想保持我的代码清洁并将其拆分为多个文件.


编辑

DetailViewController.h

@interface DetailViewController : UIViewController

... Some Properties

... Some Methods

@end
Run Code Online (Sandbox Code Playgroud)

DetailViewController.m

#import "DetailViewController.h"

@implementation DetailViewController

... Some Synthesizes

... Some Methods

@end
Run Code Online (Sandbox Code Playgroud)

DetailViewController + Protocols.h

@interface DetailViewController (Protocols) <UITableViewDelegate, UITableViewDataSource>

@end
Run Code Online (Sandbox Code Playgroud)

DetailViewController + Protocols.m

@implementation DetailViewController (Protocols)

- (NSINteger)numberOfSections
{
    return ...;
}

- (NSInteger)numberOfRowsInSection:(NSInteger)section
{
    if (section == 0)
        return ...;

    return ...;
}

...

@end
Run Code Online (Sandbox Code Playgroud)

但是,然后Xcode显示一些警告,一些委托方法没有在DetailViewController中实现.我还与导入试了一下DetailViewController + Protocols.h在DetailViewController.h.没有变化.
然后我试着忽略警告并看到:它有效!但为什么?没有这些警告,它不应该工作吗?

God*_*its 9

如果您只针对一个类使用它,则不必在不同的文件中创建完全独立的命名协议.事实上,你可能不应该因为它只是令人困惑.

如果你想保持你的主要类.h文件干净,只需移动它:

@interface DetailViewController (Protocols) <UITableViewDelegate, UITableViewDataSource>

@end
Run Code Online (Sandbox Code Playgroud)

进入@implementation上方的主.m文件

我不明白为什么你不想在你的.h中声明你的主类实现了tableview委托和数据源协议.它们是描述性的.


log*_*ell 5

是的.对类别唯一要记住的是,你不能@synthesize在其中使用属性.在类别中添加ivars也更加困难.

见这对更多的信息.