Używanie typów wyliczeniowych jako właściwości w Celu C
Jestem doświadczonym programistą .NET, który pierwszy raz wkroczył do programowania w Celu. Mam problem z właściwością typu wyliczeniowego. Jakiś kontekst ... Mam nagłówek klasy i wyliczenie w następujący sposób:
typedef enum {
Open,
Unavailable,
Unknown
} LocationStatus;
@interface Location : NSObject {
LocationStatus status;
}
@property (nonatomic) LocationStatus status;
@end
i implementacja, która wygląda tak:
@implementation Location
@synthesize status;
@end
W pewnym momencie kodu ustawiam następującą wartość:
location1.status = Open;
Następnie debuger ocenia to jako mające poprawną wartość i rozstrzyga się na poprawne wyliczenie (zwróć również uwagę na to, że nie ma tutaj innych właściwości ... one również poprawnie się oceniają).
Później w kodzie próbuję przeczytać tę właściwość w ten sposób:
LocationStatus status = location.status;
W tym momencie kodu debugger jest w stanie poprawnie ocenić wszystkie właściwości mojej klasy, z wyjątkiemStatus
, który pokazuje adres pamięci, ale nie rzeczywistą wartość. Gdy wykonanie osiągnie tę linię, konsekwentnie otrzymuję błąd EXC_BAD_ACCESS w konsoli, a aplikacja ulega awarii.
Jestem pewien, że odzwierciedla to fundamentalne nieporozumienie z mojej strony na temat używania właściwości i wyrażeń w Objective C (i prawdopodobnie C ogólnie). Gdyby ktoś mógł rzucić na to trochę światła, byłbym bardzo wdzięczny.