【问题标题】:CoreData with Swift and iOS 8+ still needs willAccessValueForKey()?带有 Swift 和 iOS 8+ 的 CoreData 仍然需要 willAccessValueForKey() 吗?
【发布时间】:2017-03-06 09:28:48
【问题描述】:

我正在我的 NSManagedObject 子类中编写一个名为 Friend 的函数。

我想知道我是否应该写这个(用户是另一个NSManagedObject 用户):

  func firstCharacterOfComputerDisplayName() -> String
  {
    guard let user = self.friend else {
      return ""
    }
    return user.firstCharacterOfComputerDisplayName()
  }

或者那个:

  func firstCharacterOfComputerDisplayName() -> String
  {
    self.willAccessValue(forKey: "friend")

    guard let user = self.primitiveValueForKey("friend") as? User else {
      self.didAccessValue(forKey: "friend")
      return ""
    }
    let dispName = user.firstCharacterOfComputerDisplayName()
    self.didAccessValue(forKey: "friend")
    return dispName
  }

【问题讨论】:

    标签: ios swift core-data nsmanagedobject


    【解决方案1】:

    是否使用willAccessValue(forKey:)primitiveValueForKey(_:)didAccessValue(forKey:) 与您使用的是 Swift 还是 iOS 8 无关。这严格来说是 Core Data 的事情。 Core Data 使用 KVO 来维护数据图的完整性等,所以它对何时观察到变化和访问有一定的期望。

    大多数情况下你不需要关心这些方法,除非你重写了一个访问器方法。如果您想要self.friend 的值,只需将其作为self.friend 索取即可。除非您要覆盖 friend 的访问器,除非您在这里没有这样做。

    【讨论】:

    • 我已经阅读了很多文档和教程 + 最近来自苹果的 iOS 演讲,我感到很困惑。我想在我的具体情况下,第一个解决方案在这里起到了作用,因为朋友已经是由 coredata 管理的访问器。
    猜你喜欢
    • 1970-01-01
    • 2015-05-21
    • 2015-09-06
    • 2021-05-02
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 2016-12-25
    • 2011-07-18
    相关资源
    最近更新 更多