Swift 3 中的核心数据属性验证
Posted
技术标签:
【中文标题】Swift 3 中的核心数据属性验证【英文标题】:Core Data Property Validation in Swift 3 【发布时间】:2017-07-05 21:50:43 【问题描述】:我正在尝试为属于 NSManagedObject
子类的属性设置 custom property validation。根据文档,Swift 3 中此类方法的一般签名如下:
func validate<Key>(value: AutoreleasingUnsafeMutablePointer<AnyObject?>) throws
我的财产被称为amount
,所以我有:
class Transaction: NSManagedObject
@NSManaged var amount: Float
func validateAmount(value: AutoreleasingUnsafeMutablePointer<AnyObject?>) throws
// custom validation logic...
据我了解,当我创建一个新的 Transaction 实例时,设置其amount
属性,然后尝试保存托管对象上下文,应在相关实例上调用validateValue:forKey:
,该实例应依次定位和调用我的自定义验证方法。不幸的是,这没有发生:validateValue:forKey:
被调用,但我的方法被忽略了。
您可以在sample project(用 Xcode 8.3.3 编写)中亲自看到这一切,如果有人能告诉我哪里出错了,我将不胜感激。
【问题讨论】:
func validateAmount(_ value: AutoreleasingUnsafeMutablePointer<AnyObject?>) throws
似乎是正确的签名。
【参考方案1】:
func validateAmount(_ value: AutoreleasingUnsafeMutablePointer<AnyObject?>) throws
被调用。在validateValue(_ value
中添加 _。
【讨论】:
太棒了!我现在可以睡觉了。 在 Swift 4 中,我必须将方法标记为@objc
才能调用它以上是关于Swift 3 中的核心数据属性验证的主要内容,如果未能解决你的问题,请参考以下文章
使用核心数据swift ios将实体的所有属性获取到tableview中的行中的标签
使用核心数据swift ios获取实体的所有属性到tableview中的行中的标签
如何在 Swift 3 中重新排序核心数据对象数组并重新排序它的 Int 属性