ошибка: свойство 'myBoolVariableName' с атрибутом 'retain' должно иметь тип объекта - PullRequest
12 голосов
/ 27 августа 2009

У меня есть значение BOOL внутри определения @interface в моем файле .h. Здесь это ниже. У него та же проблема, будь то указатель или нет.

@interface myCustomViewController : UIViewController <UIWebViewDelegate> {
{
 //...more iboutlets defined above
 BOOL *myBoolVariableName;
}

Когда я компилирую, я получаю сообщение «error: свойство 'myBoolVariableName' с атрибутом 'retain' должно иметь тип объекта" в строке для импорта моего файла .h.

Я нашел эту страницу здесь о целом / nsnumber:

http://discussions.apple.com/thread.jspa?threadID=1846927

Так что, похоже, я не могу использовать значения BOOL внутри определения @interface. Что я могу использовать вместо этого?

Что я должен делать для BOOL / логических значений?

Ответы [ 2 ]

33 голосов
/ 27 августа 2009

Я предполагаю, что позже в вашем интерфейсе у вас будет что-то вроде этого:

@property (retain) BOOL *myBoolVariableName;

Это означает, что создайте свойство, значение которого является указателем на BOOL, и используйте семантику retain.

Ваша проблема в том, что BOOL * - это указатель на байт памяти, а не указатель на объект. И сохранить это то, что относится только к объектам.

Вот как можно создать свойство BOOL.

@interface myCustomViewController : UIViewController <UIWebViewDelegate> {
    BOOL myBoolVariableName;
}

@property myBoolVariableName;

@end

Важные различия заключаются в том, что переменная объявлена ​​как "BOOL", а не "BOOL *", и свойство не имеет (сохранить).

1 голос
/ 30 апреля 2013

Я столкнулся с подобной ситуацией. Я решил это как,

@interface myCustomViewController : UIViewController {
BOOL myBoolVariableName;
}
@property BOOL myBoolVariableName;
@end

Я отсылаю один ответ от Джона Хесса, но я получил одну ошибку Для ввода имени требуется спецификатор или спецификатор. Моя предыдущая версия была похожа на

@property myBoolVariableName;

Итак, я добавил BOOL и решил проблему.

...