Swift:Parse子类dynamic var在检索对象时不被包含

Swift:Parse子类dynamic var在检索对象时不被包含,dynamic,swift,parse-platform,subclass,pfobject,Dynamic,Swift,Parse Platform,Subclass,Pfobject,从分析数据浏览器检索对象时,无法获取对象属性。这是在我从“@nsvar-managed-var-friends”改为“dynamic-var-friends”之后发生的。甚至“name”在User.logInWithUsernameInBackground块中也显示为nil,这很疯狂,因为登录成功。用户的ACL设置为“公共读取” 用户对象: class User : PFUser, PFSubclassing { dynamic var friends:[User]! dyna

从分析数据浏览器检索对象时,无法获取对象属性。这是在我从“@nsvar-managed-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()
    }
}
正在检索用户和好友。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)
   }
}
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)
        }
    }
登录。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)
   }
}
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)
        }
    }

再深入一点,障碍似乎是对Swift中的
动态
修饰符的误解。显然,Swift中的
dynamic
用于观察键值,而不是在运行时声明要定义的变量访问器(Objective-C中@dynamic的作用)

有关Swift中
动态
的说明,请参见此

这就是为什么@NSManaged在Objective-C中的工作方式是@dynamic

使用xCode 6.1.1,我能够在没有桥接头的情况下实现这一点,但我确实需要使用@NSManaged。以下是如何。。。只是:

import Parse 
在调用模块的顶部。对于类声明.swift文件动态不起作用,因此我需要对变量类型使用@NSManaged,以使它们成功链接到解析类变量。像这样:

class PSCategory : PFObject, PFSubclassing {
    override class func load() {
        self.registerSubclass()
    }
    class func parseClassName() -> String! {
        return "Category"
    }

    @NSManaged var Name: String
}
然后,在我的查询中,所有名称都被动态链接:

var query = PSCategory.query() // PFQuery(className: "Category")

query.cachePolicy = kPFCachePolicyCacheElseNetwork // kPFCachePolicyNetworkElseCache
query.maxCacheAge = 60 * 60 * 24  // One day, in seconds.
query.findObjectsInBackgroundWithBlock {
    (categories: [AnyObject]!, error: NSError!) -> Void in
    if error == nil {
        for abstractCategory in categories {
            let category = abstractCategory as PSCategory

            NSLog("Category Name: %@", category.Name)
        }
    } else {
        NSLog("Unable to retrieve categories from local cache or network")
    }
}

为什么您要从@NSManaged切换?仅供我们参考,您是否有建议这样做的链接?谢谢回复ccwasden。也许我误解了,但@NSManaged似乎只用于核心数据:根据这篇文章,解析子类需要@NSManaged,我也读过这篇文章,是的,也许是这样,只是看起来很奇怪。谢谢!谢谢!我会坚持使用@NSManaged!;)