У меня очень простой подкласс из UIViewController
:
@interface RoastChickenViewController : UIViewController {
IBOutlet UISlider *weightSlider;
}
@property (nonatomic,retain) UILabel *cookingTimeLabel;
- (void) weightValueHasChanged:(id)sender;
@end
В моем файле xib установлен RoastChickenViewController
как это тип владельца файла, и weightSlider
подключен, а действие 'valueChanged' связано с weightValuHasChanged:
.
Проблема в том, что как только я касаюсь ползунка (симулятора или устройства), я получаю:
2010-08-21 20:26:07.688 CookIt1[26682:207] -[NSCFString weightValueHasChanged:]: unrecognized selector sent to instance 0x59215e0
2010-08-21 20:26:07.690 CookIt1[26682:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFString weightValueHasChanged:]: unrecognized selector sent to instance 0x59215e0'
*** Call stack at first throw:
(
0 CoreFoundation 0x02395919 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x024e35de objc_exception_throw + 47
2 CoreFoundation 0x0239742b -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
3 CoreFoundation 0x02307116 ___forwarding___ + 966
4 CoreFoundation 0x02306cd2 _CF_forwarding_prep_0 + 50
5 UIKit 0x002b9e14 -[UIApplication sendAction:to:from:forEvent:] + 119
6 UIKit 0x003436c8 -[UIControl sendAction:to:forEvent:] + 67
7 UIKit 0x00345b4a -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 527
8 UIKit 0x003c23ac -[UISlider beginTrackingWithTouch:withEvent:] + 731
Немного истории, У меня на самом деле была эта работа с использованием прямого подкласса UIView. Мне удалось разбить его при преобразовании из UIView в UIViewController, который, как мне кажется, является более естественным способом реализации простого поведения, подобного этому. пропал.
Такая ошибка (когда объект, принимающий сообщение, имеет совершенно другой тип, чем ожидалось) часто возникает, когда объект-приемник по какой-то причине был деаллоцирован и его адрес в памяти теперь занят каким-то другим объектом.
Поэтому необходимо проверить, все ли в порядке с управлением памятью вашего контроллера.
Похоже, вы вызываете weightValueHasChanged на NSCFString. Это почти наверняка не то, что вам нужно! Либо ваши соединения в IB нарушены, либо вы явно отправляете weightValueHasChanged экземпляру NSCFString.