我正在开发一个核心数据应用程序,我的实体有一个名为deleted
的公共属性(我正在应用程序中实现逻辑删除)。
虽然所有实体都可以从一个普通实体继承,但我想避免它(我不喜欢在使用继承时所有实体最终都在同一个表中,但我离题了。)
为了保持代码整洁,我实现了一个协议:
@protocol SPRLogicalDeleteEntity <NSObject>
@property (nonatomic, retain) NSNumber * deleted;
@end
我希望所有NSManagedObject
子类都符合此协议,因此代码看起来更好。为了使代码可维护,我不想将协议添加到生成的NSManagedObject
子类中,因此我创建了一个类扩展:
@interface Product () < SPRLogicalDeleteEntity >
@end
我只使用标记实体符合我的协议。
我遇到的问题是调用conformsToProtocol:@protocol(SPRLogicalDeleteEntity)
会返回NO
。
我没有尝试过mogenerator(但如果严格要求我可以)。有提示吗?这可能是因为类扩展是空的,因此没有加载?
答案 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
为止。