iphone - 核心数据和 BOOL 设置

标签 iphone core-data ipad

我正在开发一个使用 Core Data 作为后端来管理 SQLite 记录的应用程序。我可以使用字符串和数字进行所有操作,但刚刚尝试添加 BOOL 字段,但似乎无法正常工作。

在 .xcdatamodel 中,我向对象添加了一个名为 isCurrentlyForSale 的字段,该字段不是可选的,不是 transient 的,也不是索引的。该属性的类型设置为 Boolean,默认值为 NO。

当我从数据模型创建类文件时,在 .h header 中为此属性添加的样板代码是:

@property (nonatomic, retain) NSNumber * isCurrentlyForSale;

随着

@dynamic isCurrentlyForSale;

在.m实现文件中。

我一直将 bool 值作为简单的 BOOL 来使用。我读过,我可以使用 NSNumber 的 numberWithBoolboolValue 方法,但这对于如此简单的事情来说似乎需要大量额外代码。

标题中的@property可以改成简单的BOOL吗?如果是的话有什么需要注意的吗?

谢谢 -约翰

最佳答案

虽然 Dave DeLong 的答案很接近,但您实际上可以做到这一点,而无需更改属性的名称。

可以更改属性以返回BOOL,但您需要手动编写访问器方法,它们与 Dave 在他的响应中的有点不同.

首先,您的@property 应定义为:

@property (nonatomic, getter=isCurrentlyForSale) BOOL currentlyForSale;

然后在您的实现文件中,不要声明 @dynamic 属性,而是直接创建访问器。

- (BOOL)isCurrentlyForSale
{
  [self willAccessValueForKey:@"currentlyForSale"];
  BOOL b = [[self primitiveValueForKey:@"currentlyForSale"] boolValue];
  [self didAccessValueForKey:@"currentlyForSale"];
  return b;
}

- (void)setCurrentlyForSale:(BOOL)b
{
  [self willChangeValueForKey:@"currentlyForSale"];
  [self setPrimitiveValue:[NSNumber numberWithBool:b] forKey:@"currentlyForSale"];
  [self didChangeValueForKey:@"currentlyForSale"];
}

使用这些访问器,您的对象将为您处理装箱,并且您可以将其作为原始值进行访问。此外,以 setIs 开头的 setter 并不是一个好主意,因此在示例代码中将其删除。

关于iphone - 核心数据和 BOOL 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2850532/

相关文章:

iphone - 如何在 iPad 中将 UIModalPresentationFormSheet 与 NavigationController 一起使用?

swift - 将自定义对象保存为核心数据属性

ios - 如何知道最近的 iBeacon

objective-c - 以编程方式选择 uitableview 行

iOS7 jpg解压问题

iphone - 为什么我的 NSRange 总是 0?

ios - 菜单场景中不显示 HighScore

iphone - Swift ResearchKit 在没有 ConsentDocument 的情况下导出答案

ios - 代码 : Save int CoreData

ios - 编辑核心数据会产生错误,此类与键的键值编码不兼容