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, так и с обычными "ванильными объектами". Похоже, что "шум" имеет соответствующие классы #import протокол в заголовке; было бы проще отправить декларацию протокола и импортировать в файл реализации, как я показал выше. Тем не менее, Xcode выдает предупреждение при выполнении этого способа:
Cannot find protocol definition for 'ObjectProperties'
Код компилируется и в основном работает. Я говорю в основном потому, что некоторые функции с Core Data пытаются динамически создавать геттеры/сеттеры для свойства scalar, но я думаю, что, вероятно, потому, что я попал в кэш.
Конечно, наиболее очевидная работа заключается в том, чтобы просто импортировать заголовок протокола в заголовки классов.
Если мое понимание правильное (и мои знания очень недавно получены, и поэтому вполне возможно, что я ошибаюсь), если я импортирую протокол в заголовки своего класса и вношу изменения в протокол, то все последующие файлы что импортировать мои классы придется перекомпилировать.
Каков правильный способ решения этой проблемы?