如何使用检索到的核心数据对象
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】:首先回答你的第二个问题,不。 Time
是 NSManagedObject
的子类。你可以使用
let time = Time(context:managedContext)
然后您可以访问您的time
实例的属性:
time.hours = 10
time.minutes = 20
要回答您的第二个问题,我会质疑这是否有必要;也许您可以解释一下您要做什么。
您可以使用包含hour
和minute
的计算属性来实现您正在寻找的相同目标。
【讨论】:
谢谢。我确实将代码生成设置为手动,这是它创建的我可以编辑的代码,也许这毕竟不是“手动”方式?您将如何将 didSet 与这些属性一起使用?我试过并得到“@NSManaged not allowed on observing properties”。使用计算属性时,我得到类似的结果:“@NSManaged not allowed on computed properties”。我希望能以我可以使用 didSet 或计算属性的方式提供基于这些属性的代码示例。 您不能创建计算属性@NSManaged
,但您可以使用计算属性来获取/设置实际属性。你能解释一下你想做什么吗?
据我所知,我有一个“var dateComponents : DateComponents”属性,它不能被 NSManaged 管理。该属性需要在创建类对象时进行初始化。对于常规类,我使用构造函数来初始化 dateComponents 属性,并在任何其他属性发生更改时使用 didSet 更新 dateComponents 属性。
好的。听起来您可以简单地通过扩展将该属性添加为计算属性。以上是关于如何使用检索到的核心数据对象的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Java Android App 中使用从 Webserver 检索到的 JSON 来动态创建和使用对象
如何安全地处理使用 await foreach 检索到的 IAsyncDisposable 对象?
如何快速将核心数据托管对象数组转换为“可识别”列表? (Xcode 11,测试版 5)
如何将检索到的对象从 parse.com 传递到 NSMutableArray 以与 UITableView 一起使用?