2015-10-24 4 views
1

Я использую Parse и создал подкласс PFObject. При создании объектов это упрощает работу. Когда объекты создаются, я экспериментирую с запросом базы данных и доступом к пользовательским свойствам, которые я создал. Я нахожу, что я не могу использовать точечную нотацию для доступа к свойствам, когда я работаю с PFObject, возвращаемыми из запроса. Это нормально?Доступ к свойствам подкласса PFObject из запроса

Вот подкласс, который я создал.

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 и т. д. доступны с точечной нотацией, но ни один из моих пользовательских свойств. Вы можете видеть, что я обращаюсь к messageSeen с помощью element.objectForKey ("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

ответ

0

Ваш объект подкласс должен реализовать протокол PFSubclassing и вам нужно позвонить MessagePFObject.registerSubclass() в делегат своего приложения.

Документация по анализу очень хороша: https://parse.com/docs/ios/guide#objects-subclasses

Смежные вопросы