ril*_*lar 2 dynamic subclass parse-platform swift pfobject
从Parse Data Browser检索对象时,我无法获取对象属性.这是在我从"@NSManaged var friends"变为"dynamic var friends"之后发生的.甚至"name"在User.logInWithUsernameInBackground块中显示为nil,因为登录成功,这是疯狂的.用户的ACL设置为"公共读取".
用户对象:
class User : PFUser, PFSubclassing {
dynamic var friends:[User]!
dynamic var name:String!
override class func load() {
self.registerSubclass()
}
}
Run Code Online (Sandbox Code Playgroud)
与朋友一起检索用户.println显示零
var query = User.query()
query.includeKey("friends")
query.getObjectInBackgroundWithId(currentUser.objectId) {
(pfObject: PFObject!, error: NSError!) -> Void in
if pfObject != nil {
var user = pfObject as User
var friends = user.friends as [User]
println("friends: \(friends)") //nil
} else {
println(error)
}
}
Run Code Online (Sandbox Code Playgroud)
登录.println显示零
User.logInWithUsernameInBackground(USERNAME, password:PASSWORD) {
(user: PFUser!, error: NSError!) -> Void in
if user != nil {
println("Logged in with user: \(user.name)") //nil
} else {
println(error)
}
}
Run Code Online (Sandbox Code Playgroud)
对你来说看起来更深一点,似乎障碍是dynamic对Swift中修饰语的作用的误解.显然,dynamic在Swift中用于键值观察,而不是声明变量的访问器在运行时定义(@dynamic在Objective-C中做了什么)
有关dynamicSwift 的说明,请参阅此处https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/AdoptingCocoaDesignPatterns.html#//apple_ref/doc/uid/TP40014216-CH7-XID_8
这是为了说明为什么@NSManaged的工作方式与@dynamic在Objective-C中的工作方式相同 https://developer.apple.com/library/prerelease/mac/documentation/Swift/Conceptual/BuildingCocoaApps/WritingSwiftClassesWithObjective-CBehavior.html#//apple_ref/DOC/UID/TP40014216-CH5-XID_66