ここに私のジレンマがあります。私はレガシー コードを扱っており、コード ベースの膨大な量の冗長性を単純化して削減しようとしています。これが問題の核心です。2 つの非常によく似たクラスをスーパークラス/サブクラスの関係に統合しようとしています。1 つは NSObject のサブクラスで、もう 1 つは NSManagedObject のサブクラスです。
InventoryItems.h という変数のみを含むクラスがあります。NSObject のサブクラスです。
@property (nonatomic, retain) NSString * desc;
@property (nonatomic, retain) NSString * locationInventoryId;
...
InventoryItems.m
@synthesize desc;
@synthesize locationInventoryId;
...
NSManagedObject のサブクラスである FavoriteInventoryItems.h と呼ばれる別のクラスがあります。これには、InventoryItems とまったく同じ変数が含まれており、変数が 1 つ追加されています。
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
これらのクラスの両方をスーパークラス/サブクラスの関係に統合する方法が他にわかりません。または、継承を伴わないこの問題を処理するより良い方法はありますか? 何か案は?