符合类扩展的协议

时间:2013-05-23 14:55:25

标签: ios objective-c core-data

我正在开发一个核心数据应用程序,我的实体有一个名为deleted的公共属性(我正在应用程序中实现逻辑删除)。

虽然所有实体都可以从一个普通实体继承,但我想避免它(我不喜欢在使用继承时所有实体最终都在同一个表中,但我离题了。)

为了保持代码整洁,我实现了一个协议:

@protocol SPRLogicalDeleteEntity <NSObject>

@property (nonatomic, retain) NSNumber * deleted;

@end

我希望所有NSManagedObject子类都符合此协议,因此代码看起来更好。为了使代码可维护,我不想将协议添加到生成的NSManagedObject子类中,因此我创建了一个类扩展:

@interface Product () < SPRLogicalDeleteEntity >

@end

我只使用标记实体符合我的协议。

我遇到的问题是调用conformsToProtocol:@protocol(SPRLogicalDeleteEntity)会返回NO

我没有尝试过mogenerator(但如果严格要求我可以)。有提示吗?这可能是因为类扩展是空的,因此没有加载?

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,在其中创建了一个类扩展:

@interface MyClass() <MyProtocol>

@end

MyClass的实例返回NO的{​​{1}}

我能够通过使用类别而不是扩展名来解决此问题:

MyClass + MyProtocol.h

conformsToProtocol:@protocol(MyProtocol)

MyClass + MyProtocol.m

@interface MyClass(MyProtocol) <MyProtocol>

@end

我班的现在实例为#import "MyClass+MyProtocol.h" @implementation MyClass (MyProtocol) @end 返回YES

请注意,必须包含conformsToProtocol:@protocol(MyProtocol)。最初,我试图只包含头文件,期望@implementation MyClass (MyProtocol)声明就足够了,但是<MyProtocol>仍返回conformsToProtocol:,直到我为类别添加了NO为止。