0

iPhone用のアプリケーションを作成中です。多くの情報を保存するためにコア データを使用していますが、ちょっとした障害に遭遇しました。

非常に単純な例として、パスワード属性を持つエンティティがあります。この属性はオプションです。

NSManagedObject サブクラスを自動的に生成しました。

私がやりたいのは、次の理由でこのサブクラスを拡張することです。パスワードはオプションです。アプリがパスワードを記憶するべきではないとユーザーが判断した場合、この属性のカスタム ゲッターとセッターが必要です。

セッターは、パスワードを保存する必要があるかどうかを確認します。必要な場合は、それをエンティティ サブクラスに渡します。そうでない場合は、自分のサブクラスに情報が保存されます。

ゲッターはパスワードが存在する場所を確認し、これを返します。

利点は、パスワードがコアデータモデルに保存されているかどうかに関係なく、クラスが同じように動作することです。

これが問題を引き起こすかどうかを確認するためにいくつかの検索を試みましたが、現時点ではあまり出くわしません.

4

1 に答える 1

1

はい、これでいいです。categoryこれは、またはカスタムsettersを介しgettersNSManagedObjectサブクラスで行うことができます。

ただし、カスタムsettersgetters.

NSManagedObjectプリミティブ値を取得および設定するには、 のインスタンス メソッドを使用する必要があります (データ モデルによって管理されます)。

プリミティブを取得するには、 を使用しますprimitiveValueForKey:。設定には、 を使用しますsetPrimitiveValue:forKey:

この状況では、サブクラスのpassword属性のカスタム セッターを作成します。NSManagedObject

このようなもの

- (void)setPassword:(NSString *)password
{
    BOOL shouldSetPassword = ... // your custom logic here to determine if the password should be set or not

    if (!shouldSetPassword)
        return;

    NSString *key = @"password";
    NSString *value = [self primitiveValueForKey:key];

    if (value == password)
        return;

    [self willChangeValueForKey:key];
    [self setPrimitiveValue:password forKey:key];
    [self didChangeValueForKey:key];
}
于 2013-09-27T01:04:09.063 に答える