UISearchDisplayController 自动释放如何导致不同视图控制器崩溃?

2023-11-26

我有两个视图控制器 A 和 B。从 A,我导航到视图控制器 B,如下所示:

// in View Controller A 
// navigateToB method

-(void) navigateToB {

BViewController *bViewController = 
[[BViewController alloc] initWithNibName: @"BView" bundle:nil];

bViewController.bProperty1 = SOME_STRING_CONSTANT;
bViewController.title = @"A TITLE OF A VC's CHOOSING"; 
[self.navigationController pushViewController: bViewController animated:YES];
[bViewController release]; //<----- releasing 0x406c1e0

}

在 BViewController 中,属性 bPropery1 的定义如下(注意,B 还包含 UITableView 等属性):

@property (nonatomic, copy) NSString *bProperty1;

在 A 和 B 之间来回导航时,一切似乎都工作正常。直到我将 UISearchDisplayController 添加到 BViewController 中包含的表视图中。现在,当我从 B 导航回到 A 时,应用程序崩溃了。

堆栈跟踪显示搜索显示控制器在崩溃时自动释放的情况:

#0 0x009663a7 in ___forwarding___
#1 0x009426c2 in __forwarding_prep_0___
#2 0x018c8539 in -[UISearchDisplayController _destroyManagedTableView]
#3 0x018c8ea4 in -[UISearchDisplayController dealloc]
#4 0x00285ce5 in NSPopAutoreleasePool

NSZombies 显示:

-[BViewController respondsToSelector:]: message sent to deallocated instance 0x406c1e0

并且这方面的 malloc 历史记录指向上面 A 的 navigatorToB 方法中已经释放的 bViewController:

    Call [2] [arg=132]: thread_a065e720 |start  ... <snip> 
..._sendActionsForEvents:withEvent:] | -[UIControl sendAction:to:forEvent:] | -
[UIApplication sendAction:to:from:forEvent:] | -[**AViewController navigateToB**] | 
+[NSObject alloc] | +[NSObject allocWithZone:] | _internal_class_createInstance | 
_internal_class_createInstanceFromZone | calloc | malloc_zone_calloc 

有人可以给我关于这里发生的事情的任何想法吗?在navigateToB方法中,一旦bViewController被释放(在pushViewController之后),bViewController就应该被释放。其他人甚至都不知道它,因为它是 navigatorToB 方法块的本地内容,而且它已经被释放了。

当从 B 导航回 A 时,viewDidLoad、viewWillAppear 等中不会调用任何会重新进入 navigatorToB 的内容。

看起来搜索显示控制器以某种方式引用了我的 AViewController 中的某些内容,因此当它自动释放时,它会将这个“某些内容”一起删除,但我无法理解这是怎么可能的,特别是当我使用副本来传递数据时A 和 B 之间。

我要为这件事上厕所了。我确信这是我在某个地方犯的错误,所以我向 Stack Overflow 的传奇人物寻求智慧之言或关于如何解决这个问题的建议。

非常感谢。


我通过将这些行添加到 UITableViewController 的 dealloc 方法中解决了类似的问题,该方法是 UISearchDisplayController 的委托:

self.searchDisplayController.delegate = nil;
self.searchDisplayController.searchResultsDelegate = nil;
self.searchDisplayController.searchResultsDataSource = nil;

我对要解决此问题的建议感到有点困惑,即应该在 dealloc 中释放搜索显示控制器 - 您需要做的是删除搜索显示控制器对表视图控制器的指针,因为您的表视图控制器现在是消失,并且当您的搜索显示控制器稍后发布时不应调用。它就像您想在 dealloc 中清零的任何其他委托引用一样。

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

UISearchDisplayController 自动释放如何导致不同视图控制器崩溃? 的相关文章

  • 无法识别的选择器调用静态 iOS 库中的类别方法

    我正在使用一些第三方软件来帮助使用 Xcode 4 3 2 编写 iPad 应用程序 该软件是开源的 通常经过设置 因此其代码将与开发人员为应用程序编写的任何代码一起编译 因为我在很多地方使用该软件 所以我决定将其构建为 iOS 模拟器的静
  • 如何从 UILabel 创建图像?

    我目前正在 iPhone 上开发一个简单的类似 Photoshop 的应用程序 当我想要展平图层时 标签位于良好的位置 但字体大小不佳 这是我要展平的代码 UIGraphicsBeginImageContext CGSizeMake wid
  • Excel 工作表到 iPhone 数据 -- A 点到 B 点

    尽可能简单 我有一个非常简单的 Excel 电子表格 只有 1000 多条记录 我想将其用作 iPhone 应用程序的静态数据源 最好的进攻计划是什么 我心中的可能性 1 直接读取XLS作为数据源 是否有Obj C库用于此 2 将XLS 转
  • 如何在 SQLite 中替换字符串?

    如何更新具有以下内容的表列 var mobile 233KKFSDK3234 Documents Page jpg 并将其替换为 Documents Page jpg 在 SQLite 中 注意 所有文字 除了 Documents 是动态的
  • 如何从 iOS 应用程序检测不安全的 wifi 网络

    我想检测我的应用程序中是否存在不安全的 wifi 网络 是否有任何公共 iOS API 可以实现相同的目的 没有记录的 API 可以获取该信息 如果您的应用程序需要通过网络发送和接收敏感数据 您通常应该假设没有安全连接
  • 为什么没有收到(UDP 多播)数据包?

    所以 我一直试图弄清楚为什么这不起作用 但我没有任何线索 我已经成功地从 iPhone 发送数据包并在 Mac 上接收它们 根据 tcpdump 我的 mac 正确发送数据包 此外 如果我在模拟器中运行它 它工作得很好 这让我相信这是一个网
  • CGContextSelectFont 等效项

    在 iOS 7 CGContext SelectFont 中已弃用 已弃用的消息说我必须使用 Core Text 但我不知道哪一个与这段代码完全相同 CGContextSelectFont context Helvetica kBarLab
  • 使用 AudioStreamer 获取 MP3 ID3 元数据和歌曲持续时间

    我在用着马特 加拉格尔的 AudioStreamer http cocoawithlove com 2008 09 streaming and playing live mp3 stream html通过 HTTP 播放 MP3 我需要知道
  • 将捕获的图像精确裁剪为 AVCaptureVideoPreviewLayer 中的外观

    我有一个使用 AV Foundation 的照片应用程序 我使用 AVCaptureVideoPreviewLayer 设置了一个预览层 它占据了屏幕的上半部分 因此 当用户尝试拍照时 他们只能看到屏幕上半部分看到的内容 这很好用 但是当用
  • 为每行 NSTableView 文本着色

    我有一个 NSTableView 它显示我拥有的对象数组 对于每个对象 行 我想根据在每个对象上运行的函数的结果来更改显示的文本的颜色 因此 例如表中存在于另一个列表 或其他一些要求 中的所有对象 我想以绿色文本显示它们 不存在的对象以红色
  • 如何将unix时间戳转换为iphone中的nsdate [重复]

    这个问题在这里已经有答案了 可能的重复 从 Unix 时间戳创建 NSDate https stackoverflow com questions 5827240 create nsdate from unix timestamp 我有一个
  • 如果加载 dylib,垃圾收集工作队列会崩溃

    我们正在将应用程序从 10 6 移植到 10 8 我正在查看我们在应用程序中加载的 dylib 我面临着非常不寻常的崩溃垃圾收集工作队列并附有以下消息 malloc Thread suspend unable to suspend a th
  • 与 Objective-C 的 VPN 连接

    有没有办法在 iPhone 的 Objective C 中以编程方式建立 VPN 连接 有这方面的好教程吗 有人知道吗 多谢 我认为第三方应用程序无法访问这些 API
  • 使用 Interface Builder 创建的自定义视图在其他视图中调用时不会呈现

    我有一个用于主窗口的 xib 并通过以下步骤创建了一个自定义视图 创建一个新类 继承自NSView MyView h import
  • 使用自动布局、IB 和字体大小时表头视图高度错误

    我正在尝试为我的 uiTableView 创建一个标题视图 不是节标题 我已经有了 我已经在界面生成器中设置了一个 XIB 所有的连接都已连接好并且运行良好 除了桌子没有给它足够的空间 我的问题是表格顶部与表格标题有一点重叠 我的 XIB
  • 如何编辑应用程序包中的文件?

    在我的应用程序中 我从存储在捆绑资源中的 CSV 文件加载数据 但是 我希望能够在用户点击 更新 按钮时以编程方式更新此文件 有没有办法以编程方式更改应用程序包中的资源 这是我用来访问该文件的代码 NSString path NSBundl
  • 当 ViewController 从 UIStoryboard 实例化时,isMemberOfClass 返回 no

    我有一个 OCUnit 测试类 PatientTestViewControllerTests 下面是界面 interface PatientTestViewControllerTests SenTestCase property nonat
  • 对象指针值作为字典的键

    我想使用对象的引用值作为字典的键 而不是对象值的副本 因此 我本质上想在字典中存储与另一个对象的特定实例关联的对象 并稍后检索该值 这可能吗 是不是完全违背了NSDictionary的理念 我可以看出我可能以错误的方式处理这个问题 因为字典
  • UiTextField 和 resignFirstResponder

    我有一个奇怪的设置 我有一个View called View1 and a ViewController call 视图控制器1 in IB View1是 的孩子视图控制器1 Inside View1 我使用代码创建UITextField并
  • 如何重新定位或移动 Google Maps SDK 上的当前位置按钮?

    如何将 Objective C 中的当前位置按钮移至我的偏好 现在 我已启用它 但底角有东西挡住了它 Thanks 您可以使用 padding 将按钮向上移动 self mapView padding UIEdgeInsets top 0

随机推荐

  • 如何在 Nvidia Shield 上正确计时 Android RenderScript 代码

    我在 RenderScript 中实现了一个小型 CNN 想要分析不同硬件上的性能 在我的 Nexus 7 上 时间有意义 但在 NVIDIA Shield 上则不然 CNN LeNet 采用队列中的 9 层实现 计算按顺序执行 每一层都是
  • python将数字添加到字符串[重复]

    这个问题在这里已经有答案了 尝试将 count int 添加到字符串末尾 网址 Code count 0 while count lt 20 Url http www ihiphopmusic com music page Url Url
  • 如何使用 bluebird 来 promisify MySql 函数?

    前段时间我决定从 PHP 切换到 Node 在我的第一个项目中 我不想使用任何 ORM 因为我认为我不需要让我的生活变得如此复杂 学习另一件事 目前我正在学习 Node 和 Angular 因此我决定使用 mysql 包 而不需要使用 my
  • ng-focus 和 ng-blur 事件在 Angularjs 中未触发

  • Android“repo”文档可用吗?

    关于用于 Android 存储库管理的谷歌 repo 工具的唯一文档是 https sites google com a android com opensource download using repo 这比什么都没有 可用的帮助与键入
  • SwingWorker 的原理是什么?

    据我所知 它用于在 swing 应用程序中调度一个新线程来执行一些 后台 工作 但是使用它而不是 普通 线程有什么好处 使用新线程并在完成时使用 SwingUtilities invokeLater 调用某些 GUI 方法是不一样的 我在这
  • 如何在 SQL Server 中创建外键?

    我从来没有为 SQL Server 手工编码 过对象创建代码 并且外键声明在 SQL Server 和 Postgres 之间似乎是有区别的 到目前为止 这是我的 sql drop table exams drop table questi
  • 为什么我的 Python App Engine 应用程序使用 Translate API 时出现 ImportError 错误:没有名为 apiclient.discovery 的模块?

    我收到这个错误谷歌应用程序引擎Python使用过谷歌翻译API 但不知道怎么解决
  • 我可以将 PHPUnit 打包为 phar 吗?

    我想将 PHPUnit 和各种其他测试依赖项打包到 phar 中并将其放入 svn 中 这样我就可以在任何客户端机器上运行 phpunit 而不需要 pear 这可以做到吗 当前状态 phpunit phar 的工作已开始于phpunit
  • 使用类中的静态函数而不命名类

    如何访问类中的函数而不必每次都命名该类 我知道如何使用 using 这样我就不必命名命名空间 但我希望有一种方法可以处理这个静态函数 这样我就可以像调用同一个类中的函数一样调用它们 使用静态yournamespace yourclassna
  • Date.getTime() 与 Date.getTime() 对比日期.now()

    我注意到 now 只能由 Date 对象调用 getTime 只能由日期实例调用 var dd1 new Date console log dd1 now Throws error gt TypeError Object Mon Aug 1
  • 如何在 TypeScript 文件中调用 NodeJS?

    如何加载常规 NodeJS 模块 来自node modules 从一个TypeScript class 当我尝试编译时 ts文件包含 var sampleModule require modulename 编译器提示我不能在此范围内使用 r
  • 核心数据加密

    我有关于核心数据加密的问题 我将一些敏感的用户数据存储在 Core Data SQLite 数据库中 关键值都是可转换的 我使用 AES256 来 即时 加密和解密它们 包括每个值的单独 IV 加密密钥是用户选择的密码的 SHA512 哈希
  • 获取流中符合条件的第一个元素

    如何获取流中与条件匹配的第一个元素 我已经尝试过这个但不起作用 this stops stream filter Stop s gt s getStation getName equals name 该标准不起作用 过滤器方法是在 Stop
  • 使用 Powershell 将 XML 转换为哈希表

    我想转换 XML
  • 扩展打字稿接口

    在 TypeScript 中扩展 Express Request 接口时 我遇到了这个问题 我想使用外部库定义 但无法导入外部库 因为它会导致错误 gt 错误 4 28 TS1147 内部模块中的导入声明无法引用外部模块 编辑 这是一个 d
  • ReferenceError:未定义要求

    我目前正在开发 Mozilla Firefox 插件 我已经设置了一个面板并附加了一个内容脚本 我需要在内容脚本和 main js 之间进行通信 我为此使用 addon sdk 的端口 api 然而由于某种原因 我什至无法在两者之间传递简单
  • 向量储备 C++

    我有一个非常大的多维向量 其大小一直在变化 当我只知道大小的近似值时 使用 vector reserve 函数有什么意义吗 所以基本上我有一个向量 A 256 256 x y 其中 程序中的每次迭代 x 都会从 0 变化到 50 然后再次变
  • Spark 数据帧的 null 值和 countDistinct

    我有一个非常简单的数据框 df spark createDataFrame None 1 3 2 1 3 2 1 3 a b c a b c null 1 3 2 1 3 2 1 3 当我申请一个countDistinct在此数据框上 我发
  • UISearchDisplayController 自动释放如何导致不同视图控制器崩溃?

    我有两个视图控制器 A 和 B 从 A 我导航到视图控制器 B 如下所示 in View Controller A navigateToB method void navigateToB BViewController bViewContr