我有一个非常简单的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,我想这是实现这种简单行为的更自然的方式。
是否有某种检查清单我可以申请,因为显然有些东西我不知道。
答案 0 :(得分:1)
好像你在NSCFString上调用weightValueHasChanged。这几乎肯定不是你想要的!您在IB中的连接中断或者您明确地将weightValueHasChanged发送到NSCFString的实例。
答案 1 :(得分:1)
当接收器对象由于某种原因被解除分配并且其内存中的地址现在被某个其他对象占用时,通常会发生这种错误(当接收消息的对象与预期完全不同时)。
因此,您需要检查控制器的内存管理是否一切正确。