2014-12-13 551 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] 
} 

我不知道它是什麼,它應該被固定在解析的依賴關係,但我希望他們照顧好這個問題。該框架非常好。