2011-02-17 57 views
0

這是在使用Three20的情況下,但可能涉及更多的東西,我沒有得到aout客觀C.我在TTTableLinkedItemCell,只是試圖分配一個屬性,稱爲readAt需要在Objective C中投射使用點符號?

//_item.readAt = [[NSDate alloc] init]; 

「請求成員的readAt'的東西不是一個結構或聯合」

[_item setReadAt: [[NSDate alloc] init]]; 

按預期工作。然後...

((NotificationItem *)_item).readAt = [[NSDate alloc] init]; 

也適用。看起來我需要使用點符號,但Obj-C會高興地盲目地傳遞消息?這是我正在採取的正確的規則嗎?

PS:_item,根據Three20 API,是:TTTableLinkedItem * _item

+0

Is NotificationItem是TTTableLinkedItem的子類,如果是的話,那麼您聲明瞭屬性readAt的sbuclass? – 2011-02-17 19:58:15

回答

2

編譯器需要知道對象的類型才能使用點符號來訪問屬性 - 只有在對象不是靜態類型的時候才需要進行轉換。消息發送對於任何對象都是有效的,所以只要變量具有某種對象類型,它就可以工作。

那麼,爲什麼它需要知道屬性訪問器的靜態類型?因爲一個屬性可以指定任何方法作爲getter或setter,而不僅僅是缺省對foosetFoo:,所以編譯器需要知道這是爲了生成正確的訪問者調用的屬性。

1

This page涉及一個相關的問題,雖然它是關於你自己的類。在那裏提到,爲了使編譯器在使用子類時識別超類的屬性,子類的實現文件必須導入超類的頭文件。

看來,TTTableLinkedItemCell不會這樣做,所以你堅持鑄造或使用正常的消息語法。這兩種都不是理想的,但它有點超出你的控制。