Iphone 扩展NSManagedObject实体对象是否安全
我正在为iPhone制作一个应用程序。我正在使用核心数据存储大量信息,但遇到了一个小小的障碍 作为一个非常简单的示例,我有一个具有密码属性的实体。此属性是可选的 我已经自动生成了一个NSManagedObject子类 出于以下原因,我想扩展这个子类。密码是可选的。如果用户决定应用程序不应该记住密码,那么我希望这个属性有一个custome getter和setter setter将检查是否应该存储密码。如果应该,则将其传递给实体子类。如果不是,我自己的子类存储信息 getter将检查密码驻留的位置并返回此密码 其优点是,无论密码是否存储在核心数据模型中,该类的行为都是相同的Iphone 扩展NSManagedObject实体对象是否安全,iphone,ios,objective-c,core-data,nsmanagedobject,Iphone,Ios,Objective C,Core Data,Nsmanagedobject,我正在为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];
}
你是说密码将以某种方式存储?要么在核心数据中,要么在您自己的存储中?您好。没有轻微的误会。如果用户选择应用程序记住密码,它将存储在核心数据中。如果他们选择应用程序不记住密码,用户将在第一次需要密码时被请求,并在应用程序实例的生命周期内存储在我自己的子类中。哦,好的。当你说它将被存储在一个实例中时,我不确定它是否被存储。我发现不管用户选择什么,它都会被存储,这很奇怪,但现在它有了意义。嘿,这看起来正是我的意思。干杯