【问题标题】:Objective-c program crashes when trying to remove objects from superview尝试从超级视图中删除对象时,Objective-c 程序崩溃
【发布时间】:2012-06-26 02:48:29
【问题描述】:

下面是我按下按钮时调用的代码。该按钮将调用下面的方法。但是我收到“发送到实例的无法识别的选择器”错误。我究竟做错了什么?在调用此方法之前,已在另一种方法中声明了对象。我也试过隐藏按钮,但它们也会崩溃。有人请帮忙。

-(void) clearControlPannel{

    [buttCheck removeFromSuperview];
    [buttBet removeFromSuperview];
    [buttCall removeFromSuperview];
    [buttRaise removeFromSuperview];
    [buttFold removeFromSuperview];
    [betLabel removeFromSuperview];
    [betSlider removeFromSuperview];

}

崩溃是:

[buttCheck removeFromSuper]; 行上的线程 1:EXC_BAD_ACCESS"

-[__NSCFDictionary removeFromSuperview]:无法识别的选择器发送到实例 0x686b020 2012-06-24 19:08:12.175 HeadsUp[59630:f803] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSCFDictionary removeFromSuperview]:无法识别的选择器发送到实例 0x686b020”

【问题讨论】:

  • 您收到的崩溃报告是什么?
  • 我相信一个更好的问题是:Xcode 的哪一行说这是崩溃的?
  • 崩溃是否与调用clearControlPanelremoveFromSuperview有关?
  • -[__NSCFDictionary removeFromSuperview]:无法识别的选择器发送到实例 0x686b020 2012-06-24 19:08:12.175 HeadsUp[59630:f803] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因: '-[__NSCFDictionary removeFromSuperview]: 无法识别的选择器发送到实例 0x686b020'
  • 它在 removeFromSuperview 行上崩溃。我在 [buttCheck removeFromSuper] 上收到“线程 1:EXC_BAD_ACCESS”;行。

标签: ios xcode view crash superview


【解决方案1】:

无法识别的选择器发送到实例

错误是由于运行时无法找到将响应该特定操作的方法。换句话说,它无法将您的方法(选择器)的名称与其实现进行映射。

所以,如果你有一个不接受像你这样的参数的方法

- (void) clearControlPannel {...}

选择器只会是clearControlPannel

否则,如果您为该方法指定了一个参数(例如,像发送者一样,在这种情况下为UIButton)就像

- (void) clearControlPannel:(id)sender {...}

选择器将是clearControlPannel:。关注:

如果您提供更多详细信息,我们可以为您提供帮助。

编辑

只是为了给你指明正确的方向。

如果您在 UIButton 实例上使用了 – addTarget:action:forControlEvents:,则必须检查两件事。

首先,您是否正确设置了targettarget 是将操作重定向到的对象。

其次,您是否为 action 设置了正确的选择器?

这里是一个例子:

[myButton addTarget:self action@selector(mySelector:) ...];

在哪里

- (void)mySelector:(id)sender {...}

如果您实现该按钮的类也将响应该操作,请使用self,否则您需要注入一些其他实例来响应该操作。

【讨论】:

  • 我不给它发参数,[buttCall addTarget:self action:@selector(call) forControlEvents:UIControlEventTouchUpInside];然后在“call”方法里面有一个 [self clearControlPannel];
  • 我还意识到,如果我注释掉按钮(以变量名“butt”开头的对象),那么它不会崩溃,这表明这是 UIButtons 的问题。
【解决方案2】:

检查您是否正在释放正在按下的按钮。

【讨论】:

  • 我应该松开按钮吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-03
  • 1970-01-01
  • 2022-06-17
  • 2017-07-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多