2011-03-30 23 views
1

設置從類B類值在Objective-C,我想從類B只需在Objective-C

這是我的代碼設置Compass甲級synthesized (assigned)屬性...

for(Compass * ind in CompassList){ 
    if([[(Compass*)ind showAnalog] isEqualToString:str]){ 
     ind.analogValue=11.0; 
    } 
} 

不過,我得到這個錯誤...

Request for member analogValue in something not a structure or union. 

我設法用自己的二傳手,把它像避免這種錯誤0。然而,當我在另一個班級後像[(Compass*)currentDevice analogValue];致電合成消氣,我得到下面的異常...

'NSInvalidArgumentException': [Compass digitalValue]: unrecognized selector sent to instance 0x613ca20 

可能有人請幫助我明白我應該怎麼做這個。

+0

1.請向我們展示Compass的聲明。 2.在B類接口文件中,你是否在導入聲明的地方導入了頭文件? – Chuck 2011-03-30 21:05:06

+0

是的,我正在導入B類 – 2011-03-30 21:18:07

回答

0

您正在快速枚舉indicatorList作爲Indicator類型,那麼您下面的一行就會將其轉換爲Compass。如果這不是一個錯字,所有值都Compass類型然後更改代碼來讀取

for(Compass * compass in indicatorList){ 
    if([[compass showAnalog] isEqualToString:str]){ 
     compass.analogValue=11.0; 
    } 
} 

現在對於你的實際問題,你已經張貼任何代碼,涉及到的問題。我猜測原因是showAnalog正在調用一些代碼,這些代碼又調用[(Compass*)currentDevice analogValue];。這可能全都與不正確的鑄造或不完全實施類相關。

+0

.html中的Compass.h,if語句沒有問題。我測試了一切。我真的很興奮,問題是 – 2011-03-30 21:33:20

+0

我只是不確定爲什麼你枚舉一種類型,然後直接將其轉換爲另一種類型。沒有問題,只是看起來像不必要的鑄造。您可能仍想按照Chuck在上述註釋中所要求的方式發佈其他源代碼。 – Joe 2011-03-30 23:20:32