1. ホーム
  2. iphone

[解決済み] Core DataでEnumを実装する最適な方法

2022-10-02 12:42:10

質問

Core Data エンティティを enum 値にバインドして、エンティティに型プロパティを割り当てられるようにするには、どのような方法がありますか。言い換えれば、私は Item というエンティティがあり、そのエンティティに itemType プロパティを enum にバインドしたいのですが、 これを行う最良の方法は何でしょうか。

どのように解決するのですか?

enumに値を限定したい場合は、カスタムアクセサを作成する必要があります。そこで、まず、以下のようにenumを宣言します。

typedef enum {
    kPaymentFrequencyOneOff = 0,
    kPaymentFrequencyYearly = 1,
    kPaymentFrequencyMonthly = 2,
    kPaymentFrequencyWeekly = 3
} PaymentFrequency;

次に、あなたのプロパティのゲッターとセッターを宣言します。標準的なアクセサはスカラー型ではなく NSNumber オブジェクトを期待するので、既存のものをオーバーライドするのは悪い考えです。

- (PaymentFrequency)itemTypeRaw {
    return (PaymentFrequency)[[self itemType] intValue];
}

- (void)setItemTypeRaw:(PaymentFrequency)type {
    [self setItemType:[NSNumber numberWithInt:type]];
}

最後に + keyPathsForValuesAffecting<Key> を実装し、itemTypeが変更されたときにitemTypeRawのKVO通知を受け取れるようにします。

+ (NSSet *)keyPathsForValuesAffectingItemTypeRaw {
    return [NSSet setWithObject:@"itemType"];
}