Вопрос:

CoreData с Swift и iOS 8+ все еще нуждается в willAccessValueForKey ()?

ios swift core-data nsmanagedobject

178 просмотра

1 ответ

1423 Репутация автора

Я пишу функцию в моем подклассе 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
  }
Автор: Mikael Источник Размещён: 06.03.2017 09:28

Ответы (1)


0 плюса

55359 Репутация автора

Решение

Использовать ли willAccessValue(forKey:), primitiveValueForKey(_:)и didAccessValue(forKey:)не связано с тем, используете ли вы Swift или iOS 8. Это суть исключительно Core Data. Core Data использует KVO для поддержания целостности графа данных и т. Д., Поэтому у него есть определенные ожидания относительно того, когда он будет наблюдать за изменениями и доступом.

В большинстве случаев вам не нужно заботиться об этих методах, если вы не переопределяете метод доступа. Если вы хотите значение self.friend, просто спросите его как self.friend. Если вы не переопределите методы доступа, за friendисключением того, что вы не делаете это здесь.

Автор: Tom Harrington Размещён: 06.03.2017 03:59
Вопросы из категории :
32x32