带有 Swift 和 iOS 8+ 的 CoreData 仍然需要 willAccessValueForKey() 吗?
Posted
技术标签:
【中文标题】带有 Swift 和 iOS 8+ 的 CoreData 仍然需要 willAccessValueForKey() 吗?【英文标题】:CoreData with Swift and iOS 8+ still needs 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
【问题讨论】:
【参考方案1】:是否使用willAccessValue(forKey:)
、primitiveValueForKey(_:)
和didAccessValue(forKey:)
与您使用的是 Swift 还是 ios 8 无关。这严格来说是 Core Data 的事情。 Core Data 使用 KVO 来维护数据图的完整性等,所以它对何时观察到变化和访问有一定的期望。
大多数情况下你不需要关心这些方法,除非你重写了一个访问器方法。如果您想要self.friend
的值,只需将其作为self.friend
索取即可。除非您要覆盖 friend
的访问器,除非您在这里没有这样做。
【讨论】:
我已经阅读了很多文档和教程 + 最近来自苹果的 iOS 演讲,我感到很困惑。我想在我的具体情况下,第一个解决方案在这里起到了作用,因为朋友已经是由 coredata 管理的访问器。以上是关于带有 Swift 和 iOS 8+ 的 CoreData 仍然需要 willAccessValueForKey() 吗?的主要内容,如果未能解决你的问题,请参考以下文章
带有 Rpush gem 的 IOS/SWIFT 推送通知:生产中的无效令牌 (8)
使用 nib 自定义单元格和自动布局滚动跳转(ios 8 swift - UITableview)
iOS:UIView 的 Autolayout 拉伸高度过多(Xcode 8、Swift 3)