将 NSDate 和 NSNumber 和/或保存在相同的核心数据属性中

Posted

技术标签:

【中文标题】将 NSDate 和 NSNumber 和/或保存在相同的核心数据属性中【英文标题】:Saving NSDate and NSNumber and/or in the same core data attribute 【发布时间】:2012-06-08 05:41:41 【问题描述】:

在 IB 中创建核心数据模型时必须指定它的属性类型,例如 String、Date、Integer、Decimal 等。

我的问题是,我如何在同一属性中存储一个 NSDate,并在其他时间添加一个新实体,但这次使用该属性的 NSNumber。

换句话说,我只想在 coredata 中找到一个等于 id Object 的值,在获取之后,我会检查 [[Object isKindOfClass[NSDate class]] 还是 NSNumber。

我听说过可变形的,但我没有创建要存储的自定义对象。 任何关于这方面的信息都会很棒

【问题讨论】:

【参考方案1】:

这是一个非常糟糕的主意。实际上,日期在 SQLite 中表示为数字,但 Core Data 可能使用不同类型的存储,所以你只是对事情如何工作做出了太多假设。

为您的实体指定附加属性numberdate 会更加简洁和容易。然后,您可以轻松检查它们中的任何一个是否为 nil 或包含一个值。甚至引入第三个属性来告诉您对象是否有日期或数字比您的设置更可取。

【讨论】:

这个想法是实体基本上是一个“条目日志”,可以说只有两个属性,一个时间戳和值。时间戳显然是 nsdate,但我的想法是“价值”就是任何“对象”。现在唯一的要求是 NSNumber 或 NSDate,如果我添加日期条目,该值应将其记录为日期。或者如果我添加一个距离条目,该值将是 nsnumber。也许我可以将 nsdate 转换为 nsnumber 然后存储它,我不想只为一件事添加一个属性 再一次,我认为这是一个糟糕的设计。如果你想要非结构化的“日志条目”,这些应该是NSString 类型。您始终可以设计自己的方案来区分类型(例如,在 int 之前使用 'i',在 float 之前使用 'f',在 date 之前使用 'd' 等)。编写扫描仪来正确解释数据也很容易。但是,如果您可以存储真实类型,为什么还要去那里呢?【参考方案2】:

我在当前项目中遇到过这种情况。如果您的值包含 int、float、boolean,您可以使用 NSNumber 作为属性,如果它包含 NSDate,则属性应该作为实体中的字符串。

希望对您有所帮助。

【讨论】:

哎哟!,如果我使用可变形作为属性呢?会有帮助吗? 如果使用可转换的,它将完成这项工作,但如果您请求使用 NSPredicate 获取数据,那么它会给您带来问题。

以上是关于将 NSDate 和 NSNumber 和/或保存在相同的核心数据属性中的主要内容,如果未能解决你的问题,请参考以下文章

OC07 -- 迭代器/NSNumber/NSValue/NSRange/NSSet/NSDate 及相互转换.(杂)

iOS数据持久化之---属性列表

如何使用 NSKeyedArchiver 对自定义类进行编码和解码

SOAP 应用程序变量 - 整数的 NSNumber 或 NSString?

如何在 JSONKit 中 JSON 序列化 NSDate 字典

将 NSString 转换为 NSNumber 会导致数字过多和奇怪的舍入