【发布时间】:2012-07-18 00:56:22
【问题描述】:
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 对象以及普通的 ol' vanilla 对象。在其标头中包含符合标准的类#import 协议似乎是“噪音”;如上所示,在实现文件中转发声明协议和导入会更干净。但是,Xcode 在这样做时会抛出警告:
Cannot find protocol definition for 'ObjectProperties'
代码可以编译,并且大部分都可以工作。我之所以这么说主要是因为 Core Data 尝试为标量属性动态创建 getter/setter 有点奇怪,但我认为这可能是因为我遇到了一个极端情况。
当然,最明显的解决方法是将协议头导入到类头中。
如果我的理解是正确的(并且我的知识是最近获得的,所以我完全有可能是错的),如果我将协议导入到我的类头并更改协议,那么所有后续文件导入我的类将不得不重新编译。
解决此类问题的正确方法是什么?
【问题讨论】:
-
我也有类似的问题,但使用的是 Swift 协议。
标签: objective-c protocols