2013-06-05 51 views
1

如何將賦值給變量並稍後訪問其值?我認爲這很簡單,但每次我嘗試將enum值賦值給一個變量(在Xcode中沒有類型不匹配或警告出現),我的應用程序崩潰,出錯EXC_BAD_ACCESS錯誤。將Objective-C中的變量賦值爲變量

下面是如何設置我的enum在我的頭文件(BarTypes.h):

typedef enum { 
    BarStyleGlossy, 
    BarStyleMatte, 
    BarStyleFlat 
} BarDisplayStyle; 

沒有問題存在(閱讀和使用的值至少)。然而,當我創建一個可以存儲enum值之一(BarStyleGlossyBarStyleMatte,或BarStyleFlat)一個變量,然後嘗試設置變量,應用程序崩潰。以下是我如何設置和使用變量:

//Header 
@property (nonatomic, assign, readwrite) BarDisplayStyle barViewDisplayStyle; //I've also tried just using (nonatomic) and I've also tried (nonatomic, assign) 

//Implementation 
@synthesize barViewDisplayStyle; 

- (void)setupBarStyle:(BarDisplayStyle)displayStyle { 
    //This is where it crashes: 
    self.barViewDisplayStyle = displayStyle; 
} 

爲什麼它在這裏崩潰? 如何在變量中存儲枚舉的值?我認爲這個問題與我的理解有關enums缺乏瞭解,但如果我遵循常規變量設置和分配等,這應該工作。關於我在做什麼的任何想法都是錯誤的?

請注意,我是enum的新手,所以我這裏的詞彙可能有點混亂(請原諒我 - 如果您知道我想說的話,隨時進行編輯)。

我發現在網絡上約enums幾個引用:

編輯:這就是我所說的setupBarStyle方法:

BarView *bar = [[BarView alloc] init]; 
[bar setupBarStyle:displayStyle]; 
+0

顯示調用setupBarStyle方法 – Wain

+0

@Wain肯定會!我編輯了我的問題(編輯#1) –

+1

編譯並運行代碼時沒有任何崩潰。請添加一個崩潰日誌。 –

回答

6

只是爲了防止任何人仍然試圖找出如何將枚舉值分配給枚舉類型的變量或屬性... 以下是使用屬性的示例。

在頭文件...

@interface elmTaskMeasurement : NSObject 

typedef NS_ENUM(NSInteger, MeasurementType) { 
    D, 
    N, 
    T, 
    Y, 
    M 
}; 

@property(nonatomic) MeasurementType MeasureType; 

@end 

在其中創建對象的文件...

elmTaskMeasurement *taskMeasurement = [[elmTaskMeasurement alloc] init]; 

taskMeasurement.MeasureType = (MeasurementType)N; 
0

要實現的方法被稱爲setupBarStyle:,但你叫setupBarShape:的對象。

+0

對不起,我犯了一個錯字轉移方法調用我的問題。我現在修復了它 –

+0

@RazorSharp在這種情況下,顯示崩潰日誌和回溯。 – 2013-06-05 21:03:09

+1

@RazorSharp(我總是想知道複製粘貼可能會導致這種錯別字......) – 2013-06-05 21:03:37

0

我有這個錯誤我自己,但錯誤是由不同的錯誤引起的我偏離了自己。

我的財產「myApplicationState」的制定者如下:

-(void)setApplicationStyle:(myApplicationStyle)applicationStyle{ 
    self.applicationStyle = applicationStyle; 
    //some more code 
} 

關當然,這會導致一個無限循環,因爲在二傳手,設置被再次調用,又一次,又一次。

它必須是:

-(void)setApplicationStyle:(myApplicationStyle)applicationStyle{ 
    _applicationStyle = applicationStyle; 
    //some more code 
}