Задача -Объявления переадресации протокола C

ObjectProperties.h

@protocol ObjectProperties <NSObject>

@property (strong, nonatomic) NSString *name;
@property (strong, nonatomic) NSDate *date;
@property (assign, nonatomic) int64_t index;

@end

КлассA.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 пытается динамически создавать геттеры/сеттеры для скалярного свойства, но я думаю, что это, вероятно, потому, что я столкнулся с крайним случаем.

Конечно, самый очевидный обходной путь — просто импортировать заголовок протокола в заголовки классов.

Если мое понимание верно (и мои знания получены совсем недавно, и поэтому вполне возможно, что я ошибаюсь ), если я импортирую протокол в заголовки своего класса и вношу изменения в протокол, то все последующие файлы, которые импортируют мои классы, должны быть перекомпилированы.

Каков правильный способ решения этого типа проблемы?

55
задан edelaney05 17 July 2012 в 13:56
поделиться