使用点表示法访问成员字段时出现了一个奇怪的问题。例:
设置型号
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()
访问时,可能尚未调用FriendsModel
的mySettings.friend.settings.name
。
要解决此问题,您可以在调用FriendsModel
的位置之前,通过调用FriendsModel.registerSubclass()
来向Parse早期注册Parse.setApplicationId(..)
子类。
这就是我本人解决此类问题的方式,希望对您有帮助。