从查询中访问PFObject子类属性



我正在使用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

最新更新