解析子类对象 - 访问数组属性

时间:2014-12-13 12:55:42

标签: ios arrays swift parse-platform subclassing

这是情景:

我想用扩展PFObject的对象中存储在属性中的数组来填充uitabliview

有些事情没有像我预期的那样发挥作用。在我的uitableviewcontroller的viewDidload方法中,我填充了evento:Event对象。

这就是我所拥有的:

override func viewDidLoad() {
    println("PartecipantList viewDidLoad \(evento?)")
    println("PartecipantList viewDidLoad \(evento?.partecipants)")
}

结果:

PartecipantList viewDidLoad Optional(<Event: 0x156a1370, objectId: sKSox7JrQb, localId: (null)> {
createdBy = "<PFUser: 0x156b97e0, objectId: 97BcwWQRSk>";
endAt = "2014-12-14 10:48:00 +0000";
partecipants =     (
    "<Partecipant: 0x155a60c0, objectId: aI4bgpHuhG, localId: (null)> {\n    email = \"email_1@dominomail.ss\";\n    event = \"<Event: 0x156b91d0, objectId: sKSox7JrQb>\";\n    nickname = \"nickname_1\";\n}",
    "<Partecipant: 0x155a70a0, objectId: wN71hDJMBY, localId: (null)> {\n    ACL = \"<PFACL: 0x155a7280>\";\n    email = \"email_3@gmail.com\";\n    event = \"<Event: 0x155a6a00, objectId: sKSox7JrQb>\";\n    nickname = pippo;\n}",
    "<Partecipant: 0x155a7f60, objectId: dBLPN2nMy2, localId: (null)> {\n    email = \"xxxxxxxxxx@gmail.com\";\n    event = \"<Event: 0x155a6920, objectId: sKSox7JrQb>\";\n    nickname = nickname_2;\n}"
);
startAt = "2014-12-03 10:47:00 +0000";
title = "evento di completo";
total = "12.44";
})

因为我还没有得到原因:

PartecipantList viewDidLoad Optional([])

我做错了什么?

有什么建议吗?

为了详尽无遗,这是事件对象:

class Event:PFObject,PFSubclassing {
    override class func load() {
        self.registerSubclass()
    }
    class func parseClassName() -> String! {
        return "Event"
    }

    dynamic var createdBy:PFUser = PFUser.currentUser()
    dynamic var title:String = "Evento"
    dynamic var startAt:NSDate = NSDate()
    dynamic var endAt:NSDate = NSDate()
    dynamic var total:Double = 0.0
    dynamic var partecipants:[Partecipant] = []

}

[UPDATE]

我做了一些其他测试并使用

    if var partecipants = self.evento?.objectForKey("partecipants")  as? [AnyObject]{
        println("PartecipantList viewDidLoad \(partecipants.count)" )
    }

它有效。

这似乎与访问class属性有关。我也试过没有动态关键字,但结果是一样的。 有人有任何解释吗?

2 个答案:

答案 0 :(得分:0)

不要对Swift中的选项以及它们打印到控制台的内容感到困惑。输出远非直观。

如果可选值为Optional([]),则会获得nil。如果已填充,则查看日志语句中的数据(包括其属性)不应该让您感到惊讶。

您声明第二次测试有效。这正是从集合中提取数据的方式。它确保密钥存在并返回预期值。使用此数据填充表格视图。

答案 1 :(得分:0)

我找到了一个解决方案或者一个技巧:

当我声明类属性时,我看到使用@NSManaged而不是dynamic关键字,我实现了所需的结果:访问属性。 所以以这种方式声明事件我可以根据需要继承PFObject。

这也意味着它将引入CoreData的依赖

class Event:PFObject,PFSubclassing {
    override class func load() {
        self.registerSubclass()
    }
    class func parseClassName() -> String! {
        return "Event"
    }

    @NSManaged var createdBy:PFUser
    @NSManaged var title:String
    @NSManaged var startAt:NSDate
    @NSManaged var endAt:NSDate
    @NSManaged var total:Double
    @NSManaged var partecipants:[Partecipant] 
}

我不知道它是否应该在Parse上修复,但我希望他们能够解决这个问题。框架非常好。