Iphone 扩展NSManagedObject实体对象是否安全

Iphone 扩展NSManagedObject实体对象是否安全,iphone,ios,objective-c,core-data,nsmanagedobject,Iphone,Ios,Objective C,Core Data,Nsmanagedobject,我正在为iPhone制作一个应用程序。我正在使用核心数据存储大量信息,但遇到了一个小小的障碍 作为一个非常简单的示例,我有一个具有密码属性的实体。此属性是可选的 我已经自动生成了一个NSManagedObject子类 出于以下原因,我想扩展这个子类。密码是可选的。如果用户决定应用程序不应该记住密码,那么我希望这个属性有一个custome getter和setter setter将检查是否应该存储密码。如果应该,则将其传递给实体子类。如果不是,我自己的子类存储信息 getter将检查密码驻留的位置

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

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

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

出于以下原因,我想扩展这个子类。密码是可选的。如果用户决定应用程序不应该记住密码,那么我希望这个属性有一个custome getter和setter

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

getter将检查密码驻留的位置并返回此密码

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


我已经试着做了一些搜索,看看这是否会导致任何问题,但目前没有遇到太多问题。

是的,这样做很好。您可以通过
NSManagedObject
子类上的
category
或自定义
setters
getter
来实现这一点

但是,要小心使用您的自定义
设置器
获取器

您需要使用
NSManagedObject
的实例方法来获取和设置基本值(由数据模型管理)

要获取基本体,请使用
primitiveValueForKey:
。对于设置,请使用
setPrimitiveValue:forKey:

在这种情况下,我将为
NSManagedObject
子类上的
password
属性创建一个自定义setter

像这样的

- (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];
}

你是说密码将以某种方式存储?要么在核心数据中,要么在您自己的存储中?您好。没有轻微的误会。如果用户选择应用程序记住密码,它将存储在核心数据中。如果他们选择应用程序不记住密码,用户将在第一次需要密码时被请求,并在应用程序实例的生命周期内存储在我自己的子类中。哦,好的。当你说它将被存储在一个实例中时,我不确定它是否被存储。我发现不管用户选择什么,它都会被存储,这很奇怪,但现在它有了意义。嘿,这看起来正是我的意思。干杯