当我查询我的类时,我也需要它的指针数据。虽然是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
对象中。
我该怎么做?
答案 0 :(得分:0)
好的,首先,对于Swift或Objective-C,我并不是那么有经验。但是Parse的基础知识在所有编码语言中都是一样的,所以我会尽量让它像任何乱码一样可以理解。
其次,我从[Parse iOS docs]
获得了信息对PFObject进行子类化
创建PFObject子类:
这是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编程语言的经验有限,几乎可以肯定这个代码有一些编译问题。最重要的是,我在这里尝试提供的大部分信息都是基于我在自己的项目中必须处理的问题,包括分别固定对象和指针。