我在CoreData模型中有一个具有布尔字段的实体。这作为NSNumber存储在CoreData实体上。我想要的是让访问者使用BOOL而不是NSNumber,所以我可以使用

comment.isActive = YES;

代替:
BOOL isCommentActive = [NSNumber numberWithBool:comment.isActive];

我打算更改自动生成的实体类文件中的代码,但被告知不要执行此操作,因为每次提取模型时它都会覆盖。

我为实体提供了一个类别,并且尝试对访问器进行编码,将其转换为同名的BOOL,但这只会导致我陷入循环。

有人提到方法旋转,但对我来说听起来很棘手。我应该只创建返回不同名称的原语的访问器吗?

最佳答案

创建时只需选择选项“对原始数据类型使用标量属性”
Xcode中的托管对象子类。这将创建属性

@interface MyEntity : NSManagedObject
@property (nonatomic) BOOL active;
@end

并且所有转换都是在“幕后”自动完成的。实际上更多
高效,因为未创建NSNumber对象。

不幸的是,《核心数据编程指南》在使用方面已经过时了
为此,it still claims:

您可以将属性声明为标量值,但对于标量值
核心数据无法动态生成访问器方法-您必须
提供您自己的实现。

据我所知,唯一的Apple“文档”是WWDC 2011会议视频,比较https://stackoverflow.com/a/14091193/1187415

10-08 06:10
查看更多