ios swift parse:将所有相关数据放入一个对象中

时间:2015-03-09 10:27:22

标签: ios swift object parse-platform

当我查询我的类时,我也需要它的指针数据。虽然是findObjectsInBackgroundWithBlock方法,但我希望将所有数据合并为一个对象。这是我到目前为止的查询:

func fetchAllObjects(){

        PFObject.unpinAllObjectsInBackgroundWithBlock(nil)

        var query = PFQuery(className: "CardSet")
        query.whereKey("user", equalTo: PFUser.currentUser())
        query.includeKey("lesson")

        query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in

            if (error == nil) {

                for object in objects{

                    var lesson: PFObject = object["lesson"] as PFObject
                    // how do I get the lessons object into the cardset object?

                }

                PFObject.pinAllInBackground(objects, block: nil)

            }else{
                println(error.userInfo)
            }
        }

    }

由于我想将整个对象与行PFObject.pinAllInBackground(objects, block: nil)中的所有相关数据相关联,我需要将lesson对象打包到CardSet对象中。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

好的,首先,对于Swift或Objective-C,我并不是那么有经验。但是Parse的基础知识在所有编码语言中都是一样的,所以我会尽量让它像任何乱码一样可以理解。

其次,我从[Parse iOS docs]

获得了信息

对PFObject进行子类化

创建PFObject子类:

  1. 声明符合PFSubclassing协议的子类。
  2. 实现类方法parseClassName。这是你的字符串 将传递给initWithClassName:并生成所有未来的类名 引用不必要。
  3. 在.m文件(Objective-C)或网桥中导入PFObject +子类 头文件(Swift)。这实现了PFSubclassing中的所有方法 超出parseClassName。
  4. 在Parse之前调用[YourClass registerSubclass] setApplicationId:clientKey :.一个简单的方法是用你的 在Objective-C中使用class'+ load方法或在Swift中使用+ initialize。
  5. 这是CardSet的基本设置

    // Import this header into your Swift bridge header file to
    // let Armor know that PFObject privately provides most of
    // the methods for PFSubclassing.
    
    #import <Parse/PFObject+Subclass.h>
    
    // CardSet.swift
    
    class CardSet : PFObject, PFSubclassing {
      override class func initialize() {
        var onceToken : dispatch_once_t = 0;
        dispatch_once(&onceToken) {
          self.registerSubclass()
        }
      }
    
      static func lessons() -> [Lesson] {
        return @"lesson"
      }
    
      static func parseClassName() -> String! {
        return "CardSet"
      }
    }
    
    // CardSet.h
    @interface Armor : PFObject<PFSubclassing>
    + ([Lesson] *)lessons;
    @property (retain) Lesson *lessons;
    + (NSString *)parseClassName;
    @property (retain) NSString *displayName;
    @end
    

    这是课程的子类

    // Import this header into your Swift bridge header file to
    // let Armor know that PFObject privately provides most of
    // the methods for PFSubclassing.
    
    #import <Parse/PFObject+Subclass.h>
    
    // Lesson.swift
    
    class Lesson: PFObject, PFSubclassing {
      override class func initialize() {
        var onceToken : dispatch_once_t = 0;
        dispatch_once(&onceToken) {
          self.registerSubclass()
        }
      }
    
      static func lessonName() -> String {
        return @"name"
      }
    
      static func parseClassName() -> String! {
        return "Lesson"
      }
    }
    
    // CardSet.h
    @interface Armor : PFObject<PFSubclassing>
    + ([Lesson] *)lessons;
    @property (retain) NSString *lessons;
    + (NSString *)parseClassName;
    @property (retain) NSString *displayName;
    @end
    

    您可以使用armor.displayName访问displayName属性,或使用armor.displayName = @“Wooden Shield”分配给它

    let query = CardSet.query()
    query.whereKey("user", equalTo: PFUser.currentUser())
    query.includeKey("lesson")
    query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
    
            if (error == nil) {
    
                for object in objects{
                    var lesson: Lesson = object.lesson //Since it automatically loaded the data inside the subclass, you don't actually have to set any variable
    
                }
    
                PFObject.pinAllInBackground(objects, block: nil)
    
            }else{
                println(error.userInfo)
            }
        }
    

    现在要记住几条重要的规则:

    首先在4中已经讨论过了,但是我想再次对它进行讨论,在你做[Parse setApplicationId:clientKey:]之前,你必须注册这些的子类解析将它们识别为PFObject的子类。 (见4。)

    由于您要从PFObject继承CardSet和Lessons,因此请务必记住您的子类包含所有数据库字段的方法,否则您将无法访问这些字段。

    我希望这会有所帮助,并且可以为您提供子类化的开始!

    声明: 我对iOS编程语言的经验有限,几乎可以肯定这个代码有一些编译问题。最重要的是,我在这里尝试提供的大部分信息都是基于我在自己的项目中必须处理的问题,包括分别固定对象和指针。