代码之家  ›  专栏  ›  技术社区  ›  Gareth Davis

从uislider实现valueChanged操作时出现无法识别的选择器错误

  •  1
  • Gareth Davis  · 技术社区  · 14 年前

    我有一个非常简单的子类 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 回复  |  直到 14 年前
        1
  •  1
  •   Vladimir    14 年前

    这种错误(当接收消息的对象的类型与预期的完全不同)通常发生在接收对象由于某种原因被释放,并且其内存中的地址现在被其他对象占用时。

    因此,您需要检查控制器的内存管理是否一切正常。

        2
  •  1
  •   ennuikiller    14 年前

    似乎您在nscfstring上调用了weightvaluehas changed。这几乎肯定不是你想要的!您在ib中的连接断开,或者您正在显式地将weightValueHasChanged发送到nscfString的实例。