Ошибка: несовместимые типы при инициализации? (IPhone, Objective-C) - PullRequest
0 голосов
/ 21 декабря 2009

Я получаю сообщение об ошибке "float pos = [sender value];" ... sender должен быть UISlider, который я настроил в Интерфейсном Разработчике.

ButtonViewController.m

- (IBAction)slide: (id)sender {
 float pos = [sender value];
 loadValue.progress = pos;
}

ButtonViewController.h

@interface Button_Fun4ViewController : UIViewController {
 IBOutlet UIProgressView *loadValue;
}

- (IBAction)slide: (id)sender;

БЛАГОДАРНОСТЬ.

Ответы [ 3 ]

3 голосов
/ 21 декабря 2009

Хотя отправитель «должен» быть UISlider, компилятор этого не знает.Все, что он видит, это id, который он связывает с первой подходящей сигнатурой метода, которую он может найти;вероятно, тот, который возвращает что-то отличное от float (и в качестве окончательного предположения, компилятор предположит, что он возвращает id).

В этом случае вам нужно будет перенести это в UISlider:*

- (IBAction)slide: (id)sender {
    float pos = [(UISlider *)sender value];
    loadValue.progress = pos;
}

Использование NSAssert() или if() для двойной проверки того, что это факт, UISlider не будет плохой идеей, но не является строго необходимым.

1 голос
/ 21 декабря 2009

Поскольку sender имеет тип id, вы должны указать, какой это тип.

Используйте следующее:

float pos = [(UISlider *)sender value];

Кроме того, вы можете использовать протоколы. Таким образом, вы можете получать различные типы объектов, которые, если они придерживаются протокола, могут использоваться одинаково.

@protocol myProtocol {
-(float)value;
}

-(void)myMethod:(id<myProtocol>)sender {
    float pos = [sender value];
}
1 голос
/ 21 декабря 2009

Так как отправитель имеет тип 'id', компилятор не знает, что он вернет из своих сообщений, и предполагает, что они вернут типизированное значение 'id'. Вам необходимо либо преобразовать отправителя в UISlider (чтобы компилятор знал, что -value возвращает значение с плавающей точкой), либо преобразовать возвращенное значение сообщения в число с плавающей точкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...