- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个带有 3 个 View Controller 的应用程序,它们被推送到导航 Controller 堆栈上。
(A) -> (B) -> (C)
(A)
在 viewWillAppear
中注册通知:
NotificationCenter.default.addObserver(self, selector: #selector(reload), name: NSNotification.Name(rawValue: "DATA_CHANGED"), object: nil)
和(A
) 在viewWillDisappear
中取消注册:
NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: "DATA_CHANGED"), object: nil)
此外,(A)
在 deinit()
中取消注册,但这从未被调用。
现在 (B)
被压入堆栈并注册/注销与 (A)
相同的事件。
现在 (C)
被插入堆栈,触发计算并弹回 (B)
。一段时间后,当 (B)
出现时,计算完成并触发通知:
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "DATA_CHANGED"), object: nil)
但这会导致
Thread 1: EXC_BAD_ACCESS
我确定通知是问题所在,因为我拼错了通知名称,但没有发生崩溃。此外,(A)
和 (B)
仍未释放,因为它们位于堆栈中。我在 Profiler 中找不到任何 Zombie。
知道可能是什么问题吗?
我正在使用 XCode 9beta6 和 Swift 4。
最佳答案
所以我只花了大约 4 个小时在我自己的代码中修复这个问题。这是我的问题:
我在选择器中指定的函数有一个默认值为 nil 的可选参数。然后我的选择器看起来就像你的一样——没有参数列表。但是,当我发出通知时,我收到了 EXC_BAD_ACCESS。
我试图用我的选择器调用与我在其上注册通知的子类相关的父函数。我不得不在子类上创建一个辅助函数并调用父类的函数。
如果您在 reload 中有一个可选参数和/或 reload 是父类中的一个函数,请尝试制作一个调用 reload 的辅助函数,并让您的选择器指向它。
关于ios - 通知中心 : BAD_ACCESS when Notification postet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45812121/
当我从 EKEvent 访问生日ContactIdentifier 属性时,我总是立即收到 BAD_ACCESS 错误(甚至无法进行 nil 检查) 这是我用来获取的代码 import UIKit
我有 A 类和 B 类。我正在从 A 类调用 B 类。这里我的问题是 A 类的宽度和高度取决于 B 类。当 sizeForScrollView 属性(B 类属性)更改时我想要通知。一切正常。但是当我当
我正在从 ARKit 捕获一帧并从中获取 CVPixelBuffer func session(_ session: ARSession, didUpdate frame: ARFrame) {
我想保留我的风景。为此,我正在使用此代码,但 BAD_ACCESS 即将到来。在这里,我正在为相机 overlayView 编写这段代码。 -(void)viewDidLoad { [[
当我尝试使用我在 iPhone 开发中从本地 SQLITE 数据库中选择的值执行任何操作时,我收到 EXC_BAD_ACCESS。我的功能代码是 -(void) updateFromDB { // S
我用 Xcode 编写。我的代码应该将文本文件逐行读取到指针数组 *ar[] 中。我使用了一个简单的循环,通过 getc() 将每个字符读取到 c,并将 c 读取到 *ar[i]。如果 c!= '\n
我在 Xcode 7.3 上的 Swift 2.2 中发现了一个奇怪的错误(或者这不是错误但我做错了什么)。 我有一个枚举,其中一个案例和类将此枚举作为初始化程序的参数 enum OneCaseEnu
我正在浏览一个可变参数列表,当我到达列表中的最后一个对象时,我总是会收到 BAD_ACCESS 错误。我强烈认为它是 ARC相关问题。 这是我的做法: -(NSString *)replaceToke
我有一个由 NSFetchedResultsController 提供的 UITableViewController。 一切正常,直到我添加 if (self.fetchedResultsContro
好吧,我完全不知所措了。一小部分用户在我的主机名翻译中似乎存在 BAD_ACCESS 错误。 完整的崩溃如下: Exception Type: EXC_BAD_ACCESS (SIGSEGV) Ex
由于某种原因,我的应用程序崩溃了,我不确定是什么原因导致了问题,除了它似乎与处理文件时跨越的调度队列有关。任何帮助将不胜感激。 Crashed Thread: 0 Dispatch queue:
这听起来可能是个新手问题,但我是 iOS 开发新手, 最近我切换到 ARC 并在我的代码中遇到以下问题。我已经使用以下 init 方法实现了一个类 - (id)init { self = [s
下面是我上传日志文件到FTP的代码,问题是有时执行[mInputStream open]时会崩溃。 XCode 显示 BAD_ACCESS。我猜这可能是由于上传大文件造成的。然而,即使文件很小,有时也
我正在尝试像这样实例化 UiAlertView: UIAlertView *alert = [[UIAlertView alloc]
我在使用异步调度时遇到了一个非常奇怪的错误访问错误。我设法将其减少到程序中的这段代码。 -(void)buttonTapped:(id)sender { __block NSArray*foo
我有一个属性(noARC) @property (nonatomic, retain) NSString *itemUUID; 和一个初始化 - (void) viewDidAppear:(BOOL)
我在子类 UIImageview 中有一个 CGMutablePathRef 属性。当我创建新路径并将其分配给属性时,CGPathRelease 在我调用 CGPathContainsPoint 时会
在运行时循环两次,在通过请求查询调用 PrepareStatement 时因 Bad_Access 而崩溃。 所以我检查了所有的 ResultSet 内存并释放了它但是没有想法有什么办法可以解决这个问
也许我不打算使用 CoreData 显示选定行的详细信息,但我无法弄清楚为什么我会收到“BAD_ACCESS”错误。我用谷歌搜索,找不到我要找的东西。 基本上,我使用 CoreData 来填充 Tab
我有一个带有 3 个 View Controller 的应用程序,它们被推送到导航 Controller 堆栈上。 (A) -> (B) -> (C) (A) 在 viewWillAppear 中注册
我是一名优秀的程序员,十分优秀!