Используя мое собственное перечисление typedef, получаю ‘Создает указатель из целого числа без приведения’

#iphone #objective-c #class #pointers #uiview

#iPhone #objective-c #класс #указатели #uiview

Вопрос:

Ошибка, которую я обнаружил, заключается в том, что ‘Присваивание создает указатель из целого числа без приведения’. Вот мой код:

 typedef enum {
    UIIconTypeCustom = 0,
    UIIconTypeStandard,
} UIIconType;
  

.

 -(void)addIconWithType:(UIIconType *)iconType {

...

}
  

И это строка, с которой у него проблема:

 [iconView addIconWithType:UIIconTypeStandard];
  

Ответ №1:

Ваш метод имеет указатель в качестве параметра:

 -(void)addIconWithType:(UIIconType *)iconType;
// Takes a pointer to a UIIconType as argument
  

и вы передаете ему целое число:

 [iconView addIconWithType:UIIconTypeStandard];
// UIIconTypeStandard is not a pointer to a UIIconType
  

Измените определение вашего метода на это:

 -(void)addIconWithType:(UIIconType)iconType;
  

Кроме того, не определяйте свои собственные перечисления, классы или что-либо еще с префиксом UI . Этот префикс зарезервирован Apple, и вы вызовете бессмысленную головную боль для себя, используя его. Используйте свои инициалы или инициалы вашей компании или проекта.

Причина, по которой почти все методы Objective-C имеют параметры со звездочкой, заключается в том, что когда вы используете объект, объект остается в одном месте в памяти, и вы просто передаете указатель на этот объект. Это то, что MyClass * указывает — указатель на объект типа MyClass . Указатель выдает вам адрес местоположения объекта в памяти, так что вы можете избежать необходимости перемещать весь объект с места на место, когда захотите его использовать. В этом случае то, что вы хотите передать методу, является не объектом, а простым целым числом, поэтому вы можете просто передать целое число напрямую.

Ответ №2:

Изменить:

 -(void)addIconWithType:(UIIconType *)iconType
  

Для:

 -(void)addIconWithType:(UIIconType)iconType
  

Ваш метод ожидает указатель на UIIconType, но вы пытаетесь передать его по значению.