NSManagedObject在Swift中实现协议的EXC_BAD_ACCESS错误
我有以下两种方法:
func isAuthenticated() -> Bool { var currentUser: CurrentUser? = self.getCurrentUser() if currentUser == nil { return false } self.token = getUserToken(currentUser!.username) if self.token == nil { return false } if !tokenIsValidForUser(self.token!, user: currentUser!) { return false } return true } func tokenIsValidForUser(token: AuthenticationToken, user: UserObject) -> Bool { if token.username != user.username { return false } return true }
当我调用isAuthenticated()
,它在tokenIsValidForUser()
的第一行失败,显然在CurrentUser对象上。
我的理解是,当对象不存在时,你会得到这种错误,但我不明白为什么会这样。
对象typesCurrentUser被声明为:
protocol UserObject { var username: String { get set } } class CurrentUser: NSManagedObject, UserObject { @NSManaged var username: String }
我在这里find了这个问题的解决scheme:
http://lesstroud.com/dynamic-dispatch-with-nsmanaged-in-swift/
实质上,这是在NSManaged的对象上实现协议时Swift的怪癖。 我不得不将dynamic
关键字添加到CurrentUser类的@NSManaged属性中,以便类如下所示:
class CurrentUser: NSManagedObject, UserObject { @NSManaged dynamic var username: String }