这是情景:
我想用扩展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属性有关。我也试过没有动态关键字,但结果是一样的。 有人有任何解释吗?
答案 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上修复,但我希望他们能够解决这个问题。框架非常好。