2014-12-13 43 views
0

这是该方案:解析子类对象 - 访问数组属性

我想,以填补与存储在属性中在扩展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 protected]\";\n event = \"<Event: 0x156b91d0, objectId: sKSox7JrQb>\";\n nickname = \"nickname_1\";\n}", 
    "<Partecipant: 0x155a70a0, objectId: wN71hDJMBY, localId: (null)> {\n ACL = \"<PFACL: 0x155a7280>\";\n email = \"[email protected]\";\n event = \"<Event: 0x155a6a00, objectId: sKSox7JrQb>\";\n nickname = pippo;\n}", 
    "<Partecipant: 0x155a7f60, objectId: dBLPN2nMy2, localId: (null)> {\n email = \"[email protected]\";\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] = [] 

} 

[更新]

我做一些其他测试和使用

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

它的工作。

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

+0

请解释什么是不工作。 – Mundi 2014-12-13 14:14:40

+0

请再阅读帖子。 这与访问Event类的参与者属性有关。在对象的输出中,您可以看到参与者数组已填充,但数组的输出为空,直接访问属性 – tylyo 2014-12-13 15:19:53

+0

您尚未解释什么不起作用。您可以通过可选条款访问参与者。问题是什么? – Mundi 2014-12-13 16:08:16

回答

0

不要对Swift中的optionals和它们打印到控制台上感到困惑。输出很不直观。

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

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

+0

你说什么可选让我困惑。我做了一个测试,声明为 var stringOptional:String? var myString:String =“pippo”,我填充'可选'(它不是零):stringOptional =“它是一个真正的值” 然后我生成输出:println(“stringOptional:\(stringOptional)” )和println(“myString:\(myString)”)。 这里的结果是:stringOptional:可选(“它是一个真正的值”)和 myString:pippo。 在这里,我并不感到惊讶,因为输出如我所料。我认为可选是指被声明为'它也可以为零'的属性,所以你必须检查它。 – tylyo 2014-12-13 20:12:16

0

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

我看出,使用@NSManaged代替动态关键字时我声明类属性我达到预期的效果:能够访问的属性。如此声明Event以这种方式我可以按照我的意愿继承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] 
} 

我不知道它是什么,它应该被固定在解析的依赖关系,但我希望他们照顾好这个问题。该框架非常好。