【问题标题】:Core data transient values with SwiftSwift 的核心数据瞬态值
【发布时间】:2014-09-03 22:27:57
【问题描述】:

有谁知道,或者有一个例子,如何使用 Swift 处理核心数据瞬态值?我知道在属性之前使用 @NSManaged,但不知道如何编写逻辑以使用 Swift 构建瞬态值。

【问题讨论】:

  • 拥有@NSManaged 不允许我在Swift 中为瞬态属性创建getter。我也想知道瞬态属性在 Swift 中是如何工作的。
  • 您解决了这个问题吗?给定的链接有帮助吗?

标签: ios core-data swift


【解决方案1】:

选中数据模型中的 transient 字段以获取特定属性(例如 sectionTitle)。
为该实体创建类,它看起来像

 class Message: NSManagedObject {

    @NSManaged var body: String?
    @NSManaged var time: NSDate?
    @NSManaged var sectionTitle: String?
}

编辑它并使它像这样:

class Message: NSManagedObject {

    @NSManaged var body: String?
    @NSManaged var time: NSDate?

    var sectionTitle: String? {
        return time!.getTimeStrWithDayPrecision()
        //'getTimeStrWithDayPrecision' will convert timestamp to day
        //just for e.g.
        //you can do anything here as computational properties
    }
}

更新 - Swift4
为 Swift 4 使用 @objc 标签:

@objc var sectionTitle: String? {
   return time!.getTimeStrWithDayPrecision()
}

【讨论】:

  • 如果 Entity 属性中的“Codegen”设置为“manual/none”,这会很好。如何处理“Codegen”设置为“Category/Extension”?
  • 在 swift 4 中,我不得不在类似的情况下使用“@objc dynamic var sectionTitle: String? {...}”才能使其工作。
  • 在 fetch 请求中使用时,transient 属性不适用于排序描述符。它将给出一个错误,因为 keypath yourTransientVariable not found in entity with userInfo of (null)。您只能对非瞬态属性进行过滤和排序。 stackoverflow.com/a/17853561/2545465
【解决方案2】:

我们应该使用 willAccessValueForKey 和 didAccessValueForKey 来支持 KVO

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 2012-03-10
    • 1970-01-01
    • 2018-01-19
    相关资源
    最近更新 更多