Ios CoreData将NSNumbers转换为BOOL
我的CoreData模型中有一个实体,它有一个布尔字段。它作为Ios CoreData将NSNumbers转换为BOOL,ios,core-data,Ios,Core Data,我的CoreData模型中有一个实体,它有一个布尔字段。它作为NSNumber存储在CoreData实体上。我希望访问者使用BOOL而不是NSNumber,这样我就可以使用 comment.isActive = YES; 而不是: BOOL isCommentActive = [NSNumber numberWithBool:comment.isActive]; 我本来打算更改自动生成的实体类文件中的代码,但有人告诉我不要这样做,因为每次提取模型时都会被覆盖 我有一个实体的类别,我尝试编写一
NSNumber
存储在CoreData实体上。我希望访问者使用BOOL
而不是NSNumber
,这样我就可以使用
comment.isActive = YES;
而不是:
BOOL isCommentActive = [NSNumber numberWithBool:comment.isActive];
我本来打算更改自动生成的实体类文件中的代码,但有人告诉我不要这样做,因为每次提取模型时都会被覆盖
我有一个实体的类别,我尝试编写一个访问器,将其转换为同名的BOOL
,但这只会导致我陷入循环
有些人提到了方法twizzling,但对我来说,它听起来相当粗糙。我应该创建一个访问器,返回一个不同名称的原语吗 创建时,只需选择“对基本数据类型使用标量属性”选项
Xcode中的托管对象子类。这将创建属性
@interface MyEntity : NSManagedObject
@property (nonatomic) BOOL active;
@end
所有的转换都是在引擎盖下自动完成的。事实上更
高效,因为没有创建NSNumber
对象
不幸的是,“核心数据编程指南”已经过时
对此,:
可以将属性声明为标量值,但不能声明为标量值
核心数据无法动态生成您必须使用的访问器方法
提供您自己的实现
我所知道的唯一苹果“文档”是WWDC 2011会话视频,比较。我同意Martin的观点,但您可以尝试在现有的NSManagedObject子类中添加此函数:
-(void)setActiveRaw:(BOOL)active
{
[self setActive:[NSNumber numberWithBool:active]];
}
然后像这样使用它:
[comment setActiveRaw:YES];
而不是
comment.active = [NSNumber numberWithBool:comment.isActive];
您也可以为此编写一个getter:
-(BOOL)getActiveRaw
{
return [self.active boolValue]
}
马丁竞选总统!非常感谢。我向AppleSo发送了错误报告,使用原始数据类型意味着我必须使用NSTimeInterval而不是NSDate。有趣。如果我想继续使用NSDate,是否需要编写其他访问器(如getDate和setDate)?@theducs:这可能是最干净的方法。@theducs:实际上,您可以在头文件中将属性的类型更改为NSDate*,并在.m文件中将其保留为动态。唯一的缺点是,当您再次生成文件时,Xcode将覆盖此内容。非常感谢。当我想要得到值时,这并没有多大帮助,但您的设置是正确的。谢谢。没问题,让我为你设置getter函数。好的,但这是重命名属性,我不想这么做。无论如何,谢谢。这并不完全是重命名,我们只是编写了一个自定义的getter和setter,通过谈论我们知道的值(BOOL类型)来处理核心数据值(NSNumber类型)。我百分之百确定我没有重命名属性,我使用它在核心数据中存储typeDef类型属性。对不起,我的意思是我想要的是一对与CoreData实体上的属性同名的访问器。马丁的回答对我很有用。谢谢现在我相信你可以使用
comment.isActive=@YES代码>