Iphone 将ivar添加到NSManagedObject子类

Iphone 将ivar添加到NSManagedObject子类,iphone,objective-c,core-data,nsmanagedobject,Iphone,Objective C,Core Data,Nsmanagedobject,我有一个NSManagedObject类的子类,用于iPhone中的核心数据。但是,我有一个临时的“字段”(ivar),我想添加到该类中(但我不想将其持久化到数据存储中)。尝试使用非正式和正式的协议,但这两种协议都给了我一种类似“静态变量”的行为。(其行为类似于类变量,而不是实例变量)。有什么建议吗 我的第一次尝试,创建了测试“虚拟类”,它应该是NSManagedObject的一个子类,然后我创建了测试类别 @interface Test (custom) NSString *_strin

我有一个NSManagedObject类的子类,用于iPhone中的核心数据。但是,我有一个临时的“字段”(ivar),我想添加到该类中(但我不想将其持久化到数据存储中)。尝试使用非正式和正式的协议,但这两种协议都给了我一种类似“静态变量”的行为。(其行为类似于类变量,而不是实例变量)。有什么建议吗

我的第一次尝试,创建了测试“虚拟类”,它应该是NSManagedObject的一个子类,然后我创建了测试类别

@interface Test (custom)
   NSString *_string  ;
  - (void)setString:(NSString *)newString;  
  - (NSString *)string;
@end
这些是通常的二传手和传接手。这是我使用测试类的方式


我也可以直接处理NSManagedObject子类(它是我的实体),但我不认为这是解决问题的方法

不能在(in)正式协议或类别中添加实例变量

类别内的任何变量定义都被视为类别外文件级别的变量定义,因此其行为类似于类变量。这是一种令人困惑的行为;我想编译器应该对此发出警告

标准解决方案是在直接表示实体的子类中添加保存瞬态数据(不在数据库中持久)的ivar,如中所示:

@interface MyEntity:NSManagedObject{
       NSString*stringHoldingTransientSomething;
}
      ...
@end

然后在核心数据编辑器中将
MyEntity
指定为类。请注意,核心数据不会自动将IVAR保存在自定义
NSManagedObject
子类中;它只保存在核心数据模型中指定的属性。因此,您可以在自定义子类中添加任意数量的簿记IVAR。

您不能在(in)正式协议或类别中添加实例变量

类别内的任何变量定义都被视为类别外文件级别的变量定义,因此其行为类似于类变量。这是一种令人困惑的行为;我想编译器应该对此发出警告

标准解决方案是在直接表示实体的子类中添加保存瞬态数据(不在数据库中持久)的ivar,如中所示:

@interface MyEntity:NSManagedObject{
       NSString*stringHoldingTransientSomething;
}
      ...
@end

然后在核心数据编辑器中将
MyEntity
指定为类。请注意,核心数据不会自动将IVAR保存在自定义
NSManagedObject
子类中;它只保存在核心数据模型中指定的属性。因此,您可以在自定义子类中添加任意数量的簿记IVAR。

我们欢迎您为正确呈现代码块所做的努力;但有一种更简单的方法:首先插入一个空行,然后将每行代码缩进四个或更多的空格!我们欢迎您为正确呈现代码块所做的努力;但有一种更简单的方法:首先插入一个空行,然后将每行代码缩进四个或更多的空格!是的,感谢正式和非正式的协议概念解释,我同意编译器应该警告开发人员。谢谢,但是如果我在更改模型后自动创建nsmanagedobject子类,所有IVAR都会被删除,对吗?有什么办法可以避免吗?是的,感谢正式和非正式的协议概念解释,我同意编译器应该警告开发人员。谢谢,但是如果我在更改模型后自动创建nsmanagedobject子类,所有IVAR都会被删除,对吗?有什么办法可以避免这种情况吗?