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;
上記のコード例から、CoreDataオブジェクトとプレーンな古いバニラオブジェクトの両方で使用されるプロトコルを.hファイルで定義しました。適合クラスがヘッダーにプロトコルをインポートするのは「ノイズ」のようです。上に示したように、プロトコルを前方宣言し、実装ファイルにインポートする方がクリーンです。ただし、Xcodeは、次のように実行すると警告をスローします。
Cannot find protocol definition for 'ObjectProperties'
コードはコンパイルされ、ほとんど機能します。私は主に、Core Dataがスカラープロパティのゲッター/セッターを動的に作成しようとしていることにいくつかのファンキーがあるためと言いますが、それはおそらく私がエッジケースにぶつかったためだと思います。
もちろん、最も明白な回避策は、プロトコルヘッダーをクラスヘッダーにインポートすることです。
私の理解が正しければ(そして私の知識はごく最近習得されたので、私が間違っている可能性があります)、プロトコルをクラスヘッダーにインポートしてプロトコルに変更を加えると、クラスを再コンパイルする必要があります。
このタイプの問題を解決する正しい方法は何ですか?