使用点表示法访问成员字段时出现了一个奇怪的问题。例:

设置型号

class SettingsModel: PFObject, PFSubclassing {

    override class func initialize() {
        struct Static {
            static var onceToken : dispatch_once_t = 0;
        }
        dispatch_once(&Static.onceToken) {
            self.registerSubclass()
        }
    }

    static func parseClassName() -> String {
        return "Settings"
    }

    @NSManaged var name:String
    @NSManaged var code:String
    @NSManaged var friend:FriendsModel

}

friend 模型
class FriendsModel: PFObject, PFSubclassing {

    override class func initialize() {
        struct Static {
            static var onceToken : dispatch_once_t = 0;
        }
        dispatch_once(&Static.onceToken) {
            self.registerSubclass()
        }
    }

    static func parseClassName() -> String {
        return "Friends"
    }

    @NSManaged var user:PFUser
    @NSManaged var settings:SettingsModel
}

当我尝试使用mySettings.friend.settings.name访问 friend 的姓名时,在“设置”上出现无法识别的选择器。

但是有趣的是,当我使用(mySettings.friend["settings"] as SettingsModel).name时,它可以工作。我故意省略了所有条件解包等。-我有正确的有效PFObject类型的所有数据...

我敢肯定这是一件微不足道的事情,但无法弄清楚……任何帮助将不胜感激。使用解析1.8.2。

最佳答案

尽管您已实现FriendsModel,但PFSubclassing似乎仍未成功注册为Parse子类。当您通过initialize()访问时,可能尚未调用FriendsModelmySettings.friend.settings.name

要解决此问题,您可以在调用FriendsModel的位置之前,通过调用FriendsModel.registerSubclass()来向Parse早期注册Parse.setApplicationId(..)子类。

这就是我本人解决此类问题的方式,希望对您有帮助。

10-08 06:07