Swift 和 iOS 8+ 的 CoreData 仍然需要 willAccessValueForKey()?

CoreData with Swift and iOS 8+ still needs willAccessValueForKey()?

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

不知是否应该这样写(user是另一个NSManagedObjectUser):

  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
  }

是否使用willAccessValue(forKey:)primitiveValueForKey(_:)didAccessValue(forKey:)与您是否使用Swift或iOS无关 8.严格来说是Core数据的东西。 Core Data使用KVO维护数据图的完整性等,所以对什么时候观察变化和访问有一定的预期。

大多数情况下您不需要关心这些方法,除非您重写访问器方法。如果您想要 self.friend 的值,只需要求 self.friend。除非你要覆盖 friend 的访问器,除非你在这里不这样做。