所以这是我的困境。我正在处理遗留代码,并试图简化和减少代码库中的大量冗余。这就是问题的症结所在。我正在尝试将两个非常相似的类合并为超类/子类关系。一个是 NSObject 的子类,另一个是 NSManagedObject 的子类。
我有一个只包含名为 InventoryItems.h 的变量的类。它是 NSObject 的子类。
@property (nonatomic, retain) NSString * desc;
@property (nonatomic, retain) NSString * locationInventoryId;
...
InventoryItems.m
@synthesize desc;
@synthesize locationInventoryId;
...
还有另一个名为 FavoriteInventoryItems.h 的类,它是 NSManagedObject 的子类。它包含与 InventoryItems 完全相同的变量,但多了一个变量。
FavoriteInventoryItems.h
@property (nonatomic, strong) NSString * desc;
@property (nonatomic, strong) NSString * locationInventoryId;
@property (nonatomic, strong) NSString * dateAddedAsFav;
....
FavoriteInventoryItems.m
@dynamic desc;
@dynamic locationInventoryId;
@dynamic dateAddedAsFav;
...
我可以通过将 InventoryItems 设置为 NSManagedObject 的子类,然后将 FavoriteInventoryItems 设置为 InventoryItems 的子类,从而成功地完成工作。它确实有效,但我收到一条消息,指示以下内容:
CoreData:错误:无法调用 NSManagedObject 类“InventoryItems”上的指定初始化程序
我的解决方案肯定是一种可能会产生负面后果的黑客攻击。
有多个地方的代码类似于以下内容:
if (InventoryItem)
...many lines of code here
else if(FavoriteInventoryItem)
...exact same code as above based on favorites
我不确定如何将这两个类合并为超类/子类关系。或者有没有更好的方法来处理这个不涉及继承的问题?有任何想法吗?