目标C:类扩展和协议构造警告

时间:2010-03-13 11:55:29

标签: iphone objective-c

我有一个大类,为了便于阅读,我将其分为几个不同的类扩展文件。

@protocol MyProtocol
@required
-(void)required;
@end

@interface MyClass : NSObject <MyProtocol>
@end

@interface MyClass (RequiredExtension)
-(void)required;
@end

在没有编译器警告的情况下,有更好的方法吗?

 warning: class 'MyClass' does not fully implement the 'MyProtocol' protocol

4 个答案:

答案 0 :(得分:14)

为每个协议实施使用类别。当我有复杂的viewControllers时,我会使用它。

例如,我有一个实现NSTextDelegate协议的类别。

所以,MyComplexViewController + NSTextDelegate.h:

#import "MyComplexViewController.h"

@interface MyComplexViewController (NSTextDelegate) <NSTextDelegate>

@end

和MyComplexViewController + NSTextDelegate.m:

#import "MyComplexViewController+NSTextDelegate.h"

@implementation MyComplexViewController (NSTextDelegate)

- (BOOL)textShouldBeginEditing:(NSText *)textObject{
    ...
}

- (BOOL)textShouldEndEditing:(NSText *)textObject{
    ...
}

- (void)textDidBeginEditing:(NSNotification *)notification{
    ...
}

- (void)textDidEndEditing:(NSNotification *)notification{
    ...
}

- (void)textDidChange:(NSNotification *)notification{
    ....
}

@end

然后我获取主类定义和类别的所有标题,并将它们组合成一个标题,然后我导入我需要使用该类的位置。

答案 1 :(得分:4)

@interface MyClass : NSObject
@end

@interface MyClass (RequiredExtension) <MyProtocol>
-(void)required;
@end

采用该类别中的协议。

答案 2 :(得分:1)

如果这只是为了便于阅读,则应仅使用类别。在这种情况下不需要协议。

答案 3 :(得分:1)

您无需更改编码风格。要绕过警告,它只需要实现协议的“必需”方法,而不是“可选”