2010-10-26 125 views
3

我在我的MainView.h標題中的接口聲明之前有這個。Typedef枚舉設置和訪問

typedef enum { UNKNOWN, CLEAR, NIGHT_CLEAR, CLOUDY, NIGHT_CLOUDY } Weather; 

然後我宣佈它是這樣的:

Weather weather; 

然後做一個訪問:

@property Weather weather; 

併合成它。

我的問題是,如何在不碰撞的情況下在不同的課程中使用它?我已經爲MainView導入了標題。 我試圖用這樣的:

MainView* myView = (MainView*)self.view; 

[myView setWeather: CLEAR]; 

它不會把我的任何錯誤在Xcode,但運行代碼時崩潰,他說:

-[UIView setWeather:]: unrecognized selector sent to instance *blah* 

難道我做錯了什麼這裏?

+0

檢查天氣,這看起來像一個類型,prolly不會工作。需要檢查實例嗎? – brumScouse 2010-10-26 18:16:43

+0

感謝您的回覆。如何檢查實例? – 2010-10-26 18:23:29

+1

在C中,您可以創建類似天氣的變量,如下所示: Weather todaysWeather; - 今天天氣是天氣的變量/實例,並會被如此檢查:if(todaysWeather == Weather.CLEAR).... – brumScouse 2010-10-26 18:26:25

回答

6

'天氣' 是一個類型不是一個變量。

所以,你想是這樣的:

Weather theWeather = [mainView weather]; 
if (theWeather == CLEAR) 
{ 
<do something> 
} 

哪裏的MainView有伊娃:

Weather weather; 
+0

這是正確的方式來做到這一點,但是當宣佈它時我沒有這樣做你寫的方式(雖然我敢肯定它會起作用),但我把它放在我的界面中,然後把它變成了一個屬性。然後我可以使用它作爲一個變量。 – 2010-10-26 18:53:09

+0

但是,如何訪問我班以外的天氣變量? – 2010-10-26 19:02:04

+1

通常,我在.h文件中定義枚舉和#defines,然後將其包含在所有其他.h文件中。當然,也有例外。也就是說,你的財產「天氣」應該可以通過任何可以訪問你的班級實例的getter/setter來訪問。也就是說,代碼示例中'MainView'的大寫會引起我的擔憂;那是你班級的名字。 MainView的一個實例應該被稱爲別的東西,比如mainView。此外,「天氣」很可能存儲在除MainView以外的其他地方,但這不是在這裏也不在那裏。 – westsider 2010-10-26 19:52:25

1

您必須刪除*Weather* weatherweather必須是一個整數,而不是指針。

+0

這正是我聲明中的問題。 – 2010-10-26 18:55:33