首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对象类型快速解析PFSubclassing

对象类型快速解析PFSubclassing
EN

Stack Overflow用户
提问于 2015-03-03 06:28:31
回答 2查看 851关注 0票数 0

我对iOS/Swift/Parse非常陌生,我正在尝试使用PFSubclassing构建一个类的模型。

我试图表示的数据应该类似于这个

代码语言:javascript
复制
{
    text: ""
    location : {
        name: "",
        longitude: "",
        latitude: ""
    }
}

,所以我的模型是

代码语言:javascript
复制
class LocationModel {
    var name: String?
    var longitude: Float?
    var latitude: Float?
}


class PostModel: PFObject, PFSubclassing {

    class func parseClassName() -> String! {
        return "Post"
    }

    @NSManaged var text: String?
    var location: LocationModel?
}

test属性正在成功保存,但我无法获得要保存的location属性。

我用来保存要解析的记录的代码是

代码语言:javascript
复制
var test = PostModel()
    test.location?.name = "ESB"
    test.location?.latitude = 1
    test.location?.longitude = 1

    test.text = "This is a test post to see if this works!"

test.saveEventually { (success: Bool, error: NSError!) -> Void in
    println(error)
    println(success)
}

我在网上做了很多调查,但是我无法找到一个解决方案,说明如何使用Parse PFSubclassing在Swift中表示一个Object数据类型

任何帮助都将不胜感激。谢谢

EN

回答 2

Stack Overflow用户

发布于 2018-05-15 11:00:46

这是我的解决方案:

例如,我将创建一个英雄对象。

代码语言:javascript
复制
class Hero: PFObject, PFSubclassing {

@NSManaged var strengthPoint: Double
@NSManaged var name: String

static func parseClassName() -> String {
    return "Hero"
}

init(strengthPoint: Double, name: String) {
    super.init()
    self.strengthPoint = strengthPoint
    self.name = name
}

init(pfObject: PFObject) {
    super.init()
    self.strengthPoint = pfObject.object(forKey: "strengthPoint") as! Double
    self.name = pfObject.object(forKey: "name") as! String

}

override init() {
    super.init()
}

override class func query() -> PFQuery<PFObject>? {
    let query = PFQuery(className: self.parseClassName())
    query.order(byDescending: "createdAt")
    query.cachePolicy = .networkOnly
    return query
}
}

现在,在定义模型之后,您可以使用这些方法来存储和检索

在服务器中创建对象

代码语言:javascript
复制
func createHero() {
    let hero = Hero(strengthPoint: 2.5, name: "Superman")
    hero.saveInBackground { (isSuccessful, error) in
        print(error?.localizedDescription ?? "Success")
    }
}

从服务器检索对象

代码语言:javascript
复制
func retrieveHero() {
    let query = Hero.query()
    query?.getFirstObjectInBackground(block: { (object, error) in
        if error != nil {
            print(error?.localizedDescription ?? "Something's wrong here")
        } else if let object = object {
            let hero = Hero(pfObject: object)
            print(hero.strengthPoint) // 2.5
            print(hero.name)          // Superman
        }
    })
}
票数 1
EN

Stack Overflow用户

发布于 2015-06-10 04:44:27

在SWIFT1.2中,我看到了几种不同的PFSubclassing方法,但以下方法对我来说效果最好:

首先,确保目标-C桥接头中有以下内容:

代码语言:javascript
复制
#import <Parse/PFObject+Subclass.h>

下面是子类PFObject的一个非常基本的示例

代码语言:javascript
复制
import Foundation
import Parse

class Car: PFObject, PFSubclassing {
    override class func initialize() {
        self.registerSubclass()
    }

    static func parseClassName() -> String {
        return "Car"
    }

    @NSManaged var model: String
    @NSManaged var color: String
    @NSManaged var yearManufactured: Int

}

所以在你的情况下,这将是:

代码语言:javascript
复制
class PostModel: PFObject, PFSubclassing {
    override class func initialize() {
        self.registerSubclass()
    }

    static func parseClassName() -> String {
        return "Post"
    }

    @NSManaged var text: String?
}

关于你的LocationModel.我有点搞不懂你到底想用它做什么。我希望这能帮到你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28825434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档