ObjectProperties.h
@protocol ObjectProperties <NSObject>
@property (strong, nonatomic) NSString *name;
@property (strong, nonatomic) NSDate *date;
@property (assign, nonatomic) int64_t index;
@end
ClassA.h
#import <Foundation/Foundation.h>
@protocol ObjectProperties;
@interface ClassA : NSObject <ObjectProperties>
- (void)specialSauce;
@end;
ManagedClassA.h
#import <CoreData/CoreData.h>
@protocol ObjectProperties;
@interface ManagedClassA : NSManagedObject <ObjectProperties>
- (void)doSomething;
@end;
从上面的代码示例中可以看出,我在一个 .h 文件中定义了一个协议,用于与 Core Data 对象以及普通的对象一起使用。在类文件中导入协议看起来像是“噪音”,在实现文件中进行前向声明并导入协议会更加清晰,就像我上面所展示的那样。然而,这种做法会导致 Xcode 报出警告:
Cannot find protocol definition for 'ObjectProperties'
虽然代码确实编译通过了,并且大部分运行正常。但有时候 Core Data 会尝试动态创建标量属性的 getter / setter,这可能是因为我遇到了某种边缘情况。
当然,最明显的解决方法就是将协议头文件直接导入类头文件。
如果我的理解是正确的(我的知识最近才开始获得,所以完全有可能我是错的),如果我将协议导入我的类头文件并对协议进行更改,则所有后续导入我的类的文件都必须重新编译。
如何才能正确地解决这种问题?