#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, но вы пытаетесь передать его по значению.