- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
StackOverflow 上有几个问题,用户遇到了与我遇到的相同问题。但是,他们的解决方案都不适合我的情况。 (请参阅 here 、 here 、 here 和 here 了解一些我已阅读但未找到帮助的 SO 问题。)
在我的例子中,我有一个 NIB,它有几个 UIButton
,以及一个关联的 Controller View 。该 View 对我的项目来说相对较旧,直到今天我才能够毫无问题地使用这些按钮。在进行了一些与按钮行为无关的代码更改后,我遇到了一个使应用程序崩溃的错误,破坏了 main()
函数中的代码并给了我一个 每当我触摸我 View 上的任何按钮时,都会出现 EXC_BAD_ACCESS
错误消息。
如何或为什么会发生这种情况?我实际上已经注释掉了几乎所有功能代码,尤其是我今天早些时候修改的代码,但我仍然无法阻止错误的发生。
我的项目正在使用自动引用计数,我以前从未见过这个错误。此外,我没有修改 NIB,也没有修改与按钮关联的 IBAction
,所以我看不出是什么原因导致的。停止错误的唯一方法是取消链接我的 NIB 中的 UIButton
到我的 Controller View 头文件中定义的 IBAction
方法。
我的用例的唯一“独特”方面是我在另一个 subview Controller 中加载该 View 的一个或两个实例。加载的断开 View 的实例数取决于数组中的对象数。下面是我用来实例化这些 View 并将其加载为另一个 View 的 subview 的代码。
//Called else where, this starts the process by creating a view that
//will load the problematic view as a sub-view either once or twice.
- (id)initWithPrimarySystemView:(SystemViewController *)svc
{
//First we create our parent, container view.
self = [super initWithNibName:@"ContainerForViewInstaniatedFromArrayObjs" bundle:nil];
if (self)
{
//Assign parent DataModel to local instance
[self setDataModel:((DataModelClass*)svc.DataModel)];
for (AnotherModel* d in DataModel.ArrayOfAnotherModels)
{
//Instantiate the SubViewController.
SubViewController* subsvc = [[SubViewController alloc]
initWithNibName:@"Subview"
bundle:nil
subviewPosition:d.Position ];
//Add the SubViewControllers view to this view.
[subsvc.view setFrame:CGRectMake((d.Position-1)*315, 0, 315, 400)];
[self.view addSubview:subsvc.view];
}
[self setDefaultFrame: CGRectMake(0, 0, 640, 400)];
}
return self;
}
这工作得很好,以前,甚至没有对关联 View 上的按钮造成任何问题,但是,现在所有 UIButton
在点击时都会使应用程序崩溃。
SubViewController 的初始化函数以及 viewDidLoad
方法仅包含创建新 ViewController 时添加的标准自动生成代码。
我该怎么做才能修复或诊断此问题?
最佳答案
在你的代码中查看我的注释:
{
SubViewController* subsvc = [[SubViewController alloc] initWithNibName:@"Subview" bundle:nil subviewPosition:d.Position ];
//!i: By default, subsvc is a __strong pointer, so your subview has a +1 retain count
// subsvc owns subsvc.view, so subsvc.view has a +1 retain count as well
//Add the SubViewControllers view to this view.
[subsvc.view setFrame:CGRectMake((d.Position-1)*315, 0, 315, 400)];
[self.view addSubview:subsvc.view];
//!i: This bumps subsvc.view to +2, as self.view strong-references it
//!i: subsvc is going out of scope, so the reference count on subsvc will drop
// to 0 and it is dealloc'd. subsvc.view's retain count drops to +1, as it
// is still referenced by self.view
//
// Most likely, in -[SubViewController dealloc], you were not doing a
// setTarget:nil, setAction:nil on the button. Thus, the button now
// has a dangling pointer and will crash when hit
}
要解决此问题,请将每个 SubViewController 实例添加到主视图 Controller 拥有的数组中。这将使 SubViewController 实例保持接收按钮点击。
关于objective-c - UIButton 使用 ARC 触及导致 EXC_BAD_ACCESS 的 IBAction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9103705/
标题看起来很长,但我想做的事情很简单。 我有几个相同的按钮排成一排,并将它们的标签设置为 0...n。单击其中任何一个(例如第二个)都会弹出一个弹出 View ,其中有几个代表不同选项的按钮(A、B、
我正在尝试添加动画以在点击按钮时淡出按钮。我现在使用的代码只是等待几秒钟,然后几乎立即淡出按钮。我想知道如何在点击按钮后立即开始淡出按钮并使淡入淡出持续大约一秒钟? 这是我目前使用的代码: UIVie
我正在尝试将属性字符串设置为按钮。 这个函数在swift上的定义是这样的 func setAttributedTitle(_ title: NSAttributedString!,
我的 UI 上有多个按钮,我想根据不同类型的点击执行不同的功能, 单击 双击 长按 对我来说,单击一下很容易,一个连接了所有四个按钮的 IBAction,但对于其他类型的点击,我被卡住了, 我知道我需
我测试了大量样本,但没有一个对我有用。这是我的代码: override func viewDidLoad() { super.viewDidLoad() let button = UI
我正在创建一个这样的按钮: let authorizationButton = UIButton() let authorizationButtonHeight = 50.0 let
我不久前才开始编码,所以对于任何明显的错误提前道歉。 我使用 Storyboard创建了两个按钮。我知道您可以像 this solution 一样更改发件人按钮的标题声明了,但我仍然不确定如何在单击第
想象一下用于 Apple TV 的维基百科之类的应用程序,其中包含一段文本,其中包含有关给定主题的信息。文本中的某些单词或短语可能是您可以阅读的其他可用主题。因此,您需要将这些单词/短语制作成可聚焦和
我正在调整一些视觉变化,并注意到当我尝试设置 UIButton 的背景颜色时,它仅设置实际按钮外部的颜色(而不是按钮本身内部的颜色) UIButton* button = [UIButton butt
这里有一个问题要问你: 我有一个 UIButton,我们将其称为 bottomButton。我有另一个 UIButton,我们将其称为 topButton。我想要做的是将 topButton 放在 b
我观察到以下情况: 通过设置 UIButton 的标题颜色就外观而言,UIMenuItems在 UIMenuController的UITextView得到相同的颜色。 applicationDidFi
应用程序从 API 产品选项加载,例如电子商务应用程序的颜色和尺寸。现在,我有点陷入代码困境。 如果选择了一个按钮,让我们说出它的颜色,则应取消选择另一个按钮,因为一次只能选择一种颜色。请看一下下面的
我想从左向右滑入一个 UIButton(屏幕截图中的灰色)并将其置于屏幕中央。虽然已经有一个 UIButton(屏幕截图中的橙色)居中,但应将此按钮推到右侧,并且始终与滑入的 UIButton 保持
如何在 UIButton 之上添加 UIButton? 这样一来,如果我移动父 UIButton,顶部的 UIButton 也会移动。 最佳答案 UIButton *testButton = [UIB
.因此,它将通过使用数组和 random() 触摸 UIButton 与 IBAction 来显示按钮上随机 1-6 个骰子图像的图像,以从图像数组中选择以在图像背景上显示 #import "View
我正在尝试以编程方式创建一个 UIButton。我有一个名为“addCash”的按钮(已在界面生成器中创建),点击此按钮后我希望另一个按钮动态出现。当在 viewDidLoad 中完成时,此按钮工作正
我有一个 UIButton 对象,它的标题是在运行时确定的。标题可能是多行的,所以我想增加 UIButton 对象的高度以匹配其标题标签的高度。我不想创建一个 UIButton 子类,因为我读到这不是
在 Storyboard上我有两个 UIButton。在我的 UIViewController 子类中,我有一个用于此按钮的 IBAction 方法。其中一个按钮有图像但没有标题,另一个按钮有标题但没
我想要一个背面有另一个按钮的按钮。当您按下按钮时,它应该水平翻转并显示另一个按钮。 Apple 在 ipod-App 中做到了这一点。当您听到一首歌曲时,您可以按下导航栏右侧的按钮,然后 View 会
我有一个自定义字段,允许用户在 UITextField 中输入文本。 UITextField 的左侧是一个 UIButton。像这样的东西: 输入您的姓名:[姓名输入栏] 在关于 UIButton 中
我是一名优秀的程序员,十分优秀!