Objective c 目标C错误:属性';主动';是类'上的标量类型;例行程序';。无法为其生成getter方法

Objective c 目标C错误:属性';主动';是类'上的标量类型;例行程序';。无法为其生成getter方法,objective-c,iphone-sdk-3.0,core-data,Objective C,Iphone Sdk 3.0,Core Data,当以下内容在iphone模拟器(3.0操作系统)中运行时,我遇到上述错误: 如您所见,我之所以将NSManagedObject子类化,是因为我使用的是核心数据。在我的数据模型中,“active”是Boolean类型的选项属性 我做错了什么 谢谢 从CD中产生的所有东西都是一个对象,而不是一个定标器。因此,将代码更改为: @interface Routine : NSManagedObject { } @property (nonatomic) NSNumber * active; @imp

当以下内容在iphone模拟器(3.0操作系统)中运行时,我遇到上述错误:

如您所见,我之所以将NSManagedObject子类化,是因为我使用的是核心数据。在我的数据模型中,“active”是Boolean类型的选项属性

我做错了什么


谢谢

从CD中产生的所有东西都是一个对象,而不是一个定标器。因此,将代码更改为:

@interface Routine : NSManagedObject {

}

@property (nonatomic) NSNumber * active;

@implementation Routine
@dynamic active
@end
如果需要,可以添加方便的访问器,将其作为标量处理:

- (BOOL) activeScalar {
  return self.active.boolValue;
}

- (void) setActiveScalar:(BOOL)active_ {
  self.active = [NSNumber numberWithBool:active_];
}

最后,如果您在模型编辑器中控制单击某个属性,它将显示一个巨大的上下文菜单,包括将适当的声明和定义复制到粘贴板中的选项,这样您就不必自己编写它们。

值得一提的是,我发现这些文档为标量提供了稍微不同的解决方案。通常不鼓励您使用标量而不是对象,但如果您使用标量,则会解释如何使用。您可以使用“primitiveName”和“setPrimitiveName”访问自动生成的访问器,这些访问器将标量放入对象(例如NSNumber)。然后创建一个标量@属性,并为使用原语的属性编写访问器

这似乎很昂贵,因为在后台CoreData将属性作为标量存储在peristent存储中,并将其转换为对象以将其作为基本体公开。因此,当您实现setName时,当我阅读文档和示例代码时,您的值被放置在一个对象中,然后在setPrimitiveName自动实现中再次提取标量。似乎每个get或set都不需要来回封送。

小错误:更改为:-(void)setActiveScalar:(BOOL)active_{self.active=[NSNumber numberWithBool:active_quo;}
- (BOOL) activeScalar {
  return self.active.boolValue;
}

- (void) setActiveScalar:(BOOL)active_ {
  self.active = [NSNumber numberWithBool:active_];
}