Нераспознанная ошибка селектора при реализации действия valueChanged из UISlider - PullRequest
1 голос
/ 21 августа 2010

У меня есть очень простой подкласс 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, который, как мне кажется, является более естественным способом реализации простого поведения, подобного этому.

Есть ли какой-то контрольный список, который я могу применить, поскольку, очевидно, что-то мне не хватает.

Ответы [ 2 ]

1 голос
/ 22 августа 2010

Этот тип ошибки (когда объект, который получает сообщение, совершенно другого типа, чем ожидалось) часто возникает, когда объект-получатель по какой-то причине был освобожден, а его адрес в памяти теперь занят каким-либо другим объектом.

Так что вам нужно проверить, все ли правильно с управлением памятью вашего контроллера.

1 голос
/ 21 августа 2010

Кажется, что вы вызываете weightValueHasChanged для NSCFString.Это почти наверняка не то, что вы хотите!Либо ваши соединения в IB разорваны, либо вы явно отправляете weightValueHasChanged экземпляру NSCFString.

...