我正在使用Parse并创建了PFObject的子类。当创建对象时,它使事情变得容易得多。创建对象之后,我将尝试查询数据库并访问我创建的自定义属性。我发现的是,当我正在处理从查询返回的PFObjects时,我不能使用点符号来访问属性。这正常吗?
是我创建的子类。
import Foundation
import UIKit
import Parse
class MessagePFObject: PFObject
{
@NSManaged var messageSender : String
@NSManaged var messageReceiver : String
@NSManaged var messageMessage : String
@NSManaged var messageSeen : Bool
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Custom Query method.
override class func query() -> PFQuery?
{
let query = PFQuery(className: MessagePFObject.parseClassName())
query.includeKey("user")
query.orderByDescending("createdAt")
return query
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
init(messageSenderInput: String?, messageReceiverInput: String?, messageMessageInput: String?)
{
super.init()
self.messageSender = messageSenderInput!
self.messageReceiver = messageReceiverInput!
self.messageMessage = messageMessageInput!
self.messageSeen = false
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
override init()
{
super.init()
}
}
//++++++++++++++++++++++++++++++++++++ EXTENSION +++++++++++++++++++++++++++++++++++++++++++++++++++
extension MessagePFObject : PFSubclassing
{
class func parseClassName() -> String
{
return "MessagePFObject"
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
override class func initialize()
{
var onceToken: dispatch_once_t = 0
dispatch_once(&onceToken) {
self.registerSubclass()
}
}
}
这是我的查询,我需要做什么来访问属性。createdAt, updatedAt等都有点符号,但我的自定义属性都没有。你可以看到我用element.objectForKey("messageSeen")访问messageSeen。
let predicate = NSPredicate(format: "messageSender == %@ OR messageReceiver == %@", self.currentUser!.username!, self.currentUser!.username!)
let query = messagePFObject.queryWithPredicate(predicate)
query!.findObjectsInBackgroundWithBlock ({ (objects, error) -> Void in
if error == nil && objects!.count > 0
{
for element in objects!
{
print(element)
print(element.parseClassName)
print(element.objectId)
print(element.createdAt)
print(element.updatedAt)
print(element.objectForKey("messageSeen"))
}
}
else if error != nil
{
print(error)
}
})
如果这是正常的,那么很好。我只是想确保我没有错过什么。
照顾,Jon
你的对象子类必须实现PFSubclassing
协议,你需要在你的应用程序委托中调用MessagePFObject.registerSubclass()
。
解析文档非常好:https://parse.com/docs/ios/guide#objects-subclasses