iOS Subview 按钮导致应用程序崩溃

Posted

技术标签:

【中文标题】iOS Subview 按钮导致应用程序崩溃【英文标题】:iOS Subview button causing application to crash 【发布时间】:2013-06-07 13:57:25 【问题描述】:

我在主视图中添加了一个子视图,子视图上有一个按钮,但是当我选择子视图上的按钮时,应用程序崩溃并以绿色突出显示以下内容:

Thread 1:EXC_BAD_ACCESS (code=1), address=0xf0000008

子视图有自己的viewcontrollerxib文件。

这是我使用的一些代码:

子视图.h

- (IBAction)setDummyTime:(id)sender;

主视图.m

PickupTimeViewController *pickupTimeView = [[PickupTimeViewController alloc]init];
[selectedView addSubview:pickupTimeView.view];

谢谢

【问题讨论】:

如果您不将其保留在 property 中,则会发生这种情况。 你能发布一些添加按钮和子视图的代码吗? 听起来它已经在你身上释放了。 【参考方案1】:

听起来它已经在你身上释放了。

尝试打开僵尸模式,再次使应用程序崩溃,看看它是否指向您正在发生的事情,它会告诉您释放后哪个对象正在尝试做某事。

Xcode -> 点击你的方案 -> 编辑方案 -> 运行 -> 诊断 -> 勾选启用僵尸对象

要尝试的另一件事是在调试区域查看您的 subView,这会告诉您您的 subView 何时发布。

Example of setting watch

另外,如果您还没有尝试过,请尝试保持对子视图的强/保留引用。

如果你不能让它工作发布你创建视图的代码。

编辑: 在.h

@property (nonatomic, strong) PickupTimeViewController *pickupTimeView;

在.m

self.pickupTimeView = [[PickupTimeViewController alloc]init]; 
[selectedView addChildViewController:self.pickupTimeView]; // (i0S5+ only) if the view you add to is a view controller if not use self otherwise.
[selectedView addSubview:pickupTimeView.view];

祝你好运, BooRanger

【讨论】:

我启用了 Zombie Objects 并且日志说:“消息发送到释放的实例 0x580...” 这是我使用的一些代码 Subview.h - (IBAction)setDummyTime:(id)sender;主视图.m PickupTimeViewController *pickupTimeView = [[PickupTimeViewController alloc]init]; [selectedView addSubview:pickupTimeView.view]; 基本上在某个你不关注对象的地方,尝试 po 内存地址,看看它是什么。 PickingTimeViewController 应该作为子项添加 [self addChildViewController:] 但我不认为就是这样,只有 ios5 了。还值得设置一个属性并尝试 self.pickupTimeController = ... 谢谢,[self addChildViewController:...] 完成了这项工作,只是在我添加子视图之前添加了该行并且它完成了工作...添加了子视图但它的控制器被释放了那是我的问题。

以上是关于iOS Subview 按钮导致应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

为啥程序退出时全局或静态对象会导致崩溃?

ios:使用 modalTransitionsytle 属性导航到另一个屏幕,导致应用程序崩溃

重新启动活动时,Android Wear 上的融合位置提供程序会导致崩溃

Crashlytics 不发送崩溃报告 [iOS]

JS 错误导致 JUCE 应用程序崩溃

按活动栏中的按钮导致应用程序崩溃