UITableView 在动画过程中崩溃,已找到解决方案,但没有找到根本原因,想知道为什么?

2024-02-19

在我的iphone项目中,我总是将UITableView作为IBOutlet插入到视图控制器中,大多数时候它运行良好,但是当popToRootViewControllerAnimated调用动画时会发生随机崩溃。通过僵尸跟踪,发现崩溃是由于UITableView实例已经被释放,但仍然有系统事件发送给它,所以崩溃。

我总是通过视图控制器的 dealloc 方法中的以下方法之一来解决此类问题。

tableView.dataSource = nil;   (work for most cases)
or
[tableView removeFromSuperview]; (work for some special cases)

虽然可以通过上述更改修复崩溃,但我仍然感到困惑。

  1. 我们需要显式地将其 dataSource 设置为 nil 以避免崩溃,这是苹果的缺陷吗?或者我们自己的应用程序代码有问题?
  2. 有谁也经历过这样的崩溃,你知道根本原因是什么吗?

任何想法或讨论将不胜感激,提前致谢。

enter code here
Exception Type: EXC_BAD_ACCESS (SIGSEGV) 
Exception Codes: KERN_INVALID_ADDRESS at 0x626f6d37 
Crashed Thread: 0 

Thread 0 name: Dispatch queue: com.apple.main-thread 
Thread 0 Crashed: 
0 libobjc.A.dylib 0x33fe0c98 objc_msgSend + 16 
1 UIKit 0x364538f6 -[UITableView(UITableViewInternal) _spacingForExtraSeparators] + 58 
2 UIKit 0x3645337a -[UITableView(_UITableViewPrivate) _adjustExtraSeparators] + 158 
3 UIKit 0x36453218 -[UITableView layoutSubviews] + 40 
4 UIKit 0x363ff5f4 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 20 
5 CoreFoundation 0x30e13efc -[NSObject(NSObject) performSelector:withObject:] + 16 
6 QuartzCore 0x33d8dbae -[CALayer layoutSublayers] + 114 
7 QuartzCore 0x33d8d966 CALayerLayoutIfNeeded + 178 
8 QuartzCore 0x33d931be CA::Context::commit_transaction(CA::Transaction*) + 206 
9 QuartzCore 0x33d92fd0 CA::Transaction::commit() + 184 
10 QuartzCore 0x33d8c04e CA::Transaction::observer_callback(__CFRunLoopObserver*,     unsigned long, void*) + 50 
11 CoreFoundation 0x30e7da2e __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 10 
12 CoreFoundation 0x30e7f45e __CFRunLoopDoObservers + 406 
13 CoreFoundation 0x30e80754 __CFRunLoopRun + 848 
14 CoreFoundation 0x30e10ebc CFRunLoopRunSpecific + 224 
15 CoreFoundation 0x30e10dc4 CFRunLoopRunInMode + 52 
16 GraphicsServices 0x34efe418 GSEventRunModal + 108 
17 GraphicsServices 0x34efe4c4 GSEventRun + 56 
18 UIKit 0x36428d62 -[UIApplication _run] + 398 
19 UIKit 0x36426800 UIApplicationMain + 664 
20 ScoutFree 0x00099558 0x1000 + 623960 
21 ScoutFree 0x00003618 0x1000 + 9752

您忘记将 tableView.delegate 设置为 nil,因此您仍然可能会崩溃,特别是当动画正在进行时(因为它现在要求死控制器提供新行)。这不是苹果的缺陷,程序员有责任清除这些引用。因此将tableView的dataSource和delegate属性设置为nil,然后释放tableview(通过将相应属性设置为nil或像这样释放iVar [_iVar release]; iVar = nil;)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UITableView 在动画过程中崩溃,已找到解决方案,但没有找到根本原因,想知道为什么? 的相关文章

随机推荐

  • QML 和 C++ 图像互操作性

    我已经浏览了文档以及我在互联网上可以找到的所有内容 但似乎不可能从 C 访问 QML 图像 有办法解决这个问题吗 在 QtQuick1 中可以做到这一点 但该功能在 QtQuick2 中被删除 我提出的解决方案允许通过实现 QML 和 C
  • 如何在终端中编辑AWS凭证?

    编辑密钥的命令是什么aws configure在终端 只需输入aws configure再次 或aws configure profile
  • 如何使用新的 Android 4.0 Ice Cream Sandwich API 读取和编辑 Android 日历事件?

    当用户想要添加新事件时 我们试图向用户展示冰淇淋三明治日历视图 我们只能在模拟器中进行测试 另一个问题是我们找不到任何如何使用 CalendarProvider 的示例 在处理三明治日历时 这是正确的课程吗 使用 Google Gdata
  • focus() 在颜色框弹出窗口中不起作用

    我尝试使用focus对于表单上的第一个输入字段 但 它不起作用 当我打电话时attr id 对于该输入 它起作用了 当我为相同的输入调用焦点时 我没有看到任何 结果 我也尝试过使用原生 Javascript 有谁知道如何 解决这个问题吗 你
  • 管理多个版本的序列化 Java 对象

    假设我有一个程序由于某种原因需要处理旧版本的序列化对象 例如 反序列化时 可能会遇到这些版本之一 class Pet private static final long serialVersionUID 1L int paws class
  • 为什么这段代码不起作用?刽子手

    我正在创建一个刽子手游戏 一切正常 我已经准备好了代码 可用于使游戏失败并给猜测值 1 尽管当将它添加到 else 语句中时 它会重复等于单词的长度 并且它也会给出一个猜测 即使它是正确的 我没看出代码有什么问题 我相信这是我的代码在猜测错
  • 假脱机多个文件

    我有一份报告 需要将 n 个供应商导出到 csv 文件 我有一种感觉 我需要多次运行它 所以我想尽可能地自动化它 我为一个供应商编写了所需的 sql plus 我想知道如何编写脚本来为每个供应商运行 我将供应商列表存储在数据库的表中 但知道
  • Rails - 当模型验证失败时,URL 更改会令人困惑

    我有一个用户资源在哪里 name是模型上的必需属性 如果我尝试创建一个新用户without一个名称 则验证失败并且错误消息按预期显示在表单顶部 but页面的 URL 更改为 users new to users 直到今晚我第一次开始玩水豚时
  • Microsoft Azure 备份在保留期缩短后不会减少可用恢复点或目标使用情况

    在保留期缩短后 Microsoft Azure 备份不会减少可用恢复点或目标使用情况 我将保留期设置为 30 天 备份量约为 6 8TB 一周前 我将保留期更改为 7 天 花了几天时间总恢复点才降至 7 个 使用率仍在上升 我今天 星期一
  • Django 每个应用程序的不同设置

    如何为每个应用程序使用不同的设置 例如 http www mysite com app1 http www mysite com app1使用 app1 文件夹的 settings py local settings py http www
  • git 合并不同的存储库?

    我所有的项目都使用 SVN 有时项目 B 是项目 A 的副本 当项目 A 有一般性变更时 我可以使用svn merge A在目录 B 中 它将合并这些更改 现在 如果我想使用 git 我不喜欢将所有项目放在同一个存储库中 因为这样我就必须克
  • WPF:找不到 Microsoft_Windows_Themes

    我在 WPF 应用程序中收到此错误 找不到类型 Microsoft Windows Themes ScrollChrome 验证您没有缺少程序集引用并且所有引用的程序集均已构建 任何想法 确保将此引用添加到控件 页面 资源字典 其他内容的最
  • 读取外部网站提交的 Angular 中的 POST 表单

    我正在开发一个网站 后端使用 Java 前端使用 Angular 有一种情况 一些外部网站可能会使用POST形式向我的网站发送数据 例如 General请求网址 https myangularwebsite 请求方式 POST 请求标头内容
  • 我可以在四元数中切换 X Y Z 吗?

    我有一个 Y 轴向上的坐标系 我需要将其转换为 Z 向上的坐标系 我将旋转存储在四元数中 所以我的问题是 如果我有一个四元数 X Y Z 我可以用 Z 切换 Y 并得到 Z 实际上是 UP 的结果吗 只是交换四元数中的两个轴 不 这不起作用
  • Azure Bicep - 有条件地创建一个秘密

    我正在使用 Bicep 创建一个 KeyVault 并且我想在保管库中创建一个秘密 但前提是还没有给定名称的秘密 检查 KeyVault 是否存在不起作用 因此我现在正在检查特定标签是否存在 创建 Vault 时 我在资源组中写入一个标签
  • 如何查看.RData 文件中的数据?

    我必须加载 isfar RData 文件才能在其他计算中使用它 此处描述并不重要 我想简单地看看 isfar RData 文件中的数据如何 例如它携带什么数字 列 行 首先我加载我的文件 isfar lt load C Users isfa
  • 打印 NSMutableURLRequest 内容

    我想问是否有人尝试过打印 NSMutableURLRequest request 的值 这是我的场景 我已经形成了我的 XML 并尝试使用 Firefox Poster 插件发送它 我成功地处理了有效和无效的内容 所以是时候进入 iOS 了
  • 全面的初学者 virtualenv 教程? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我最近听到有关 virtualenv 的传闻 我很感兴趣 但我所听到的只是一些赞扬 并不清楚它是什么或如何使用它 我正在寻找 理想情况下
  • java中如何调用一个线程在特定时间运行?

    我想让线程在特定的确切时间执行 例如 2012 07 11 13 12 24 和 2012 07 11 15 23 45 我检查了ScheduledExecutorService 但它只支持在第一次运行后的特定时间段后执行 而且我没有任何固
  • UITableView 在动画过程中崩溃,已找到解决方案,但没有找到根本原因,想知道为什么?

    在我的iphone项目中 我总是将UITableView作为IBOutlet插入到视图控制器中 大多数时候它运行良好 但是当popToRootViewControllerAnimated调用动画时会发生随机崩溃 通过僵尸跟踪 发现崩溃是由于