Я - ветеран .NET-разработчика, делающий свой первый набег на программирование Objective C. У меня возникли трудности с свойством типа перечисления. В некотором контексте... У меня есть заголовок и перечисление класса:
typedef enum {
Open,
Unavailable,
Unknown
} LocationStatus;
@interface Location : NSObject {
LocationStatus status;
}
@property (nonatomic) LocationStatus status;
@end
и реализация, которая выглядит так:
@implementation Location
@synthesize status;
@end
В какой-то момент кода я устанавливаю значение следующим образом:
location1.status = Open;
Затем отладчик оценивает это как правильное значение и разрешает правильное перечисление (обратите внимание также, что существуют другие свойства, которые здесь не показаны... они тоже правильно оценивают).
Позже в коде я попытаюсь прочитать это свойство следующим образом:
LocationStatus status = location.status;
В этот момент кода отладчик может правильно оценить все свойства моего класса, кроме Status
, который показывает адрес памяти, но не фактическое значение. Когда выполнение достигает этой строки, я последовательно получаю ошибку EXC_BAD_ACCESS в консоли, и приложение вылетает.
Я уверен, что это отражает фундаментальное недоразумение с моей стороны о том, как использовать свойства и перечисления в Objective C (и, вероятно, C вообще). Если бы кто-нибудь мог пролить свет на это, я был бы очень благодарен.