0

我正在为 iPhone 制作应用程序。我正在使用核心数据来存储大量信息,但遇到了一个小小的绊脚石。

作为一个非常简单的示例,我有一个具有密码属性的实体。该属性是可选的。

我已经自动生成了一个 NSManagedObject 子类。

我想做的是扩展这个子类,原因如下。密码是可选的。如果用户决定应用程序不应该记住密码,那么我想要这个属性的自定义 getter 和 setter。

设置器将检查是否应存储密码。如果应该,则将其传递给实体子类。如果不是我自己的子类存储信息。

getter 将检查密码所在的位置并返回。

优点是无论密码是否存储在核心数据模型中,该类的行为都是相同的。

我试图做一些搜索,看看这是否会导致任何问题,但目前还没有真正遇到。

4

1 回答 1

1

是的,这样做很好。您可以通过 a或categorycustom在您的子类上执行此操作。settersgettersNSManagedObject

但是,请注意您的自定义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 回答