- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在代码中使用了相当多的断言,因为它们在调试中很有用,但是 Cocoa 应用程序的标准行为是中断处理并将断言失败记录到控制台。UI 不会崩溃,也不会启动错误对话框,并且通常不明显发生了什么。
使程序崩溃(至少可以得到跟踪)或弹出错误对话框的最简单方法是什么?
我需要提供一个断言处理程序(看起来非常复杂!)吗?或者我可以在运行循环中捕获异常吗?
是否有任何示例代码可以帮助您最好地做到这一点?
感谢您的帮助。
最佳答案
回答您的问题主题:您不知道。
立即崩溃:abort();
要引发错误,只需创建 NSError 对象,并附上描述(自定义消息、错误号等),然后要求 NSApp -presentError:
我建议你走 NSError 路线。 Cocoa 为您提供了大量的错误处理甚至错误恢复功能。提供错误(以及为用户提供潜在的恢复选项)比简单地崩溃要好得多。毕竟,如果您知道哪里会发生错误(足以在那里调用 abort())并且您知道您所断言的内容(足以使用 NSAssert),那么您就足够了解如何要么自动恢复,要么为用户提供选项,以便他们决定要做什么。
查看 Error Handling Programming Guide了解详情。
关于cocoa - 如何让 NSAssert 使应用程序崩溃或至少弹出一个错误对话框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3211582/
NSAssert 与 NSAssert 的主要用途是什么?异常。什么时候更推荐? 最佳答案 断言通常仅在开发期间使用,并在 Release模式下从应用程序中编译出来(这由 NS_BLOCK_ASSER
我有几次被发现将函数代码放入 NSAssert 或 NSParameter 断言中,例如 NSParameterAssert( [self doSomeWork] ); 这样做的问题是,当您进行发布构
我有一段代码,其中包含一些仅在 NSAssert 语句中使用的变量。他们检查调试构建更严格执行的方法参数的某些先决条件。这是一个例子: NSString *videoCodec = [outputSe
我正在尝试在我的 iPhone 应用程序中使用 NSAssert,这样如果出现意外情况,应用程序会快速失败并崩溃并在崩溃日志中显示一条有意义的消息。 如果失败的 NSAssert 在主线程上,这可以正
我想知道到处使用 NSAssert 是否是一个好习惯?这样做有什么好处?在什么情况下最好使用它? 最佳答案 广泛使用 NSAssert() 不会将 ObjC 变成 Eiffel,但只要您记住它的实际实
我在代码中使用了相当多的断言,因为它们在调试中很有用,但是 Cocoa 应用程序的标准行为是中断处理并将断言失败记录到控制台。UI 不会崩溃,也不会启动错误对话框,并且通常不明显发生了什么。 使程序崩
正如标题所示,我如何定义一个自定义的 NSAssert ,其中包括行、类和格式,如下面的 NSLog 所示: #define NSLog(__FORMAT__, ...) NSLog((@"%@: "
最近我注意到 NSAssert 只能在 Debug模式下工作。是否有适用于正常构建的模拟? 最佳答案 你是对的。 Xcode 自动关闭发布版本的断言。如果您真的想在您的发布版本中使用它们,您可以从bu
NSAssert 和 NSCAsert 有什么区别?当我探索它们的实现时,它们看起来非常相似,但我找不到问题的答案。 我猜它还会解释 NSParameterAssert 和 NSCParameterA
我不得不问这个,因为:我唯一知道的是,如果断言失败,应用程序就会崩溃。这就是为什么要使用 NSAssert 的原因吗?或者这样做还有什么好处?将 NSAssert 置于我在代码中所做的任何假设之上是否
我经常在 iOS 代码中看到“assert”,我 google 了一下,才知道它断言 true 或 false。 我想知道这是否会在 Release模式下自动禁用? 最佳答案 更新:验证这在 Xcod
我不知道为什么我得到了 use of undeclared identifier _cmd did you mean rcmd 在 NSAssert 所在的那一行。 #import int mai
控制台为不应该的变量打印 me (null),所以我想在那里放一个断言只是为了好玩: NSAssert(myVar, @"myVar was (null)!"); 这里有什么技巧吗?这个(null)东
运行调试器时,NSAssert 在 Xcode 4(最高 4.6)中运行良好。断言触发,您对其断点,然后它输出断言消息。 但是当在调试器之外运行时(在设备上调试构建),断言会触发 - 但没有任何消息。
如果我们在带有 NSLogs 的设备上运行应用程序,那么它可能会在一定程度上降低应用程序的速度。 NSAssert 在内存方面是否与 NSLog 一样? 如有任何意见或建议,我们将不胜感激。 提前谢谢
我想在构建我们的发布 iOS 二进制文件时禁用代码行中发生的 NSAssert 调用,然后我想确认它们已被禁用,因为我 super 偏执。我如何确认它们已被禁用? 为了在我们的发布版本中禁用 NSAs
我们不能在 block 内使用 NSAssertion,因为该宏使用 self,创建一个保留循环,如此处评论: http://www.takingnotes.co/blog/2011/09/27/ma
IIRC,这通常有效。但最近我注意到 NSAssert…() 没有给我堆栈跟踪,或者至少没有提供有用的堆栈跟踪: 2012-02-26 14:41:19.283 MyApp[3299:707] ***
(假设我有充分的理由不删除代码中的 NSAssert() 检查,因为我也在进行单元测试。) 在我的单元测试代码中,我想确保当我调用它时,代码中的 NSAssert 会命中(断言)。因此,我在调用执行断
我认为 NSAssert 不能使用 printf 说明符,但是这个: NSAssert(0, @"%@%@", @"foo", @"bar"); 正如您所期望的那样工作: *** Assertion
我是一名优秀的程序员,十分优秀!