如何使用检索到的核心数据对象

Posted

技术标签:

【中文标题】如何使用检索到的核心数据对象【英文标题】:How to work with retrieved Core Data Objects 【发布时间】:2020-07-11 22:17:09 【问题描述】:

当我使用 DataCore 存储数据时,有几个限制使我将大量检索到的对象转换为常规类对象,以便我可以定期处理数据。问题是这种行为会产生一些平庸的代码行。

我面临的限制是:

A.缺乏使用 Init() 使用构造函数创建对象的能力

B. 对属性的限制,特别是在属性更改时使用 didSet。

例如,您不能在此类中使用 didSet 或创建构造函数:

   extension Time 

    @nonobjc public class func fetchRequest() -> NSFetchRequest<Time> 
        return NSFetchRequest<Time>(entityName: "Time")
    

    @NSManaged public var hours: Int
    @NSManaged public var minutes: Int
    

我应该如何克服这两个限制?

2.另外,到目前为止,我使用这种代码创建了一个 DataCore 实体对象:

let timeEntity = NSEntityDescription.entity(forEntityName: "Time", in: managedContext)!
    

let time = NSManagedObject(entity: timeEntity, insertInto: managedContext)
   time.setValue(10, forKeyPath: "hours")
   time.setValue(20, forKeyPath: "minutes")

这是在 Core Data 中创建实体的适当方式吗?

【问题讨论】:

【参考方案1】:

首先回答你的第二个问题,不。 TimeNSManagedObject 的子类。你可以使用

let time = Time(context:managedContext)

然后您可以访问您的time 实例的属性:

time.hours = 10
time.minutes = 20

要回答您的第二个问题,我会质疑这是否有必要;也许您可以解释一下您要做什么。

您可以使用包含hourminute 的计算属性来实现您正在寻找的相同目标。

【讨论】:

谢谢。我确实将代码生成设置为手动,这是它创建的我可以编辑的代码,也许这毕竟不是“手动”方式?您将如何将 didSet 与这些属性一起使用?我试过并得到“@NSManaged not allowed on observing properties”。使用计算属性时,我得到类似的结果:“@NSManaged not allowed on computed properties”。我希望能以我可以使用 didSet 或计算属性的方式提供基于这些属性的代码示例。 您不能创建计算属性@NSManaged,但您可以使用计算属性来获取/设置实际属性。你能解释一下你想做什么吗? 据我所知,我有一个“var dateComponents : DateComponents”属性,它不能被 NSManaged 管理。该属性需要在创建类对象时进行初始化。对于常规类,我使用构造函数来初始化 dateComponents 属性,并在任何其他属性发生更改时使用 didSet 更新 dateComponents 属性。 好的。听起来您可以简单地通过扩展将该属性添加为计算属性。

以上是关于如何使用检索到的核心数据对象的主要内容,如果未能解决你的问题,请参考以下文章

如何从核心数据表 ios 中检索数据?

如何在 Java Android App 中使用从 Webserver 检索到的 JSON 来动态创建和使用对象

如何安全地处理使用 await foreach 检索到的 IAsyncDisposable 对象?

如何快速将核心数据托管对象数组转换为“可识别”列表? (Xcode 11,测试版 5)

从数据库中检索到的文档的 BSON 对象大小

如何将检索到的对象从 parse.com 传递到 NSMutableArray 以与 UITableView 一起使用?