Tag: 断言

如何使NSAssert在Xcode4中logging说明?

Xcode 4告诉我什么时候NSAssert失败了,但是断言描述和回溯不再被logging。 我看到了这个问题: 如何使Xcode4停止在NSAssert失败? 这是有帮助的,但我宁愿logging断言,继续。 我怎样才能使NSAssert这样的行为? 谢谢!

尝试从导航堆栈中popup视图时断言失败

我试图popup一个特定的视图控制器在导航堆栈,但我做错了,因为我得到这个错误popup时,当我尝试执行代码 Assertion failure in -[UINavigationController popToViewController:transition:], /SourceCache/UIKit_Sim/UIKit-1912.3/UINavigationController.m:2229 这是导致问题的代码 FirstViewController *firstViewController = [[FirstViewController alloc] initWithNibName:@"FirstViewController.xib" bundle:nil]; [self.navigationController popToViewController:firstViewController animated:YES];

Swift断言在生产应用程序中的行为

我正在阅读Swift电子书中的Assertions部分,它看起来像断言的工作非常类似于他们的Objective-C同行。 然而,在文档中没有任何地方可以find关于作为生产应用程序运行时的运行时行为的任何信息。 Objective-C的NSAssert承诺不会由于断言失败而终止生产应用程序。 在Swift中是这样吗?

是否应该在生产iOS应用程序中声明?

通常的做法可能是在代码中放置断言,以便在应用程序开发期间检查input参数,数据完整性等。 我testing我的应用程序,但是,鉴于我不是Knuth( 他写1美元的支票),我不能像一些医疗和空间系统软件公司那样雇用一大批全职QA人员,假设所有应用程序总是会有很多在testing或质量保证期间从未见过的错误。 假设在其他方面看起来在理智上是不诚实的。 因此,在testing一个应用程序(并明显消除导致之前看到的ASSERT失败的所有错误)并准备将应用程序发送给Apple之后,应该如何处理Release / Distribution构build中的所有ASSERT检查? 离开还是不离开? 这里有一个让他们理解的基本原理:如果某个应用程序对某些用户来说太不可思议了,那么这个应用程序可能会被这些用户评为一星级,而没有人会告诉开发人员足够的细节。 但是,如果应用程序崩溃,从一个ASSERT失败,应用程序可能仍然获得1星级,但开发人员可能会得到一些崩溃转储间接通过iTunes和iTunes连接,如果有足够的用户select,找出哪里出了问题。 如果应用程序因为全新的ASSERT崩溃而被苹果拒绝,那么将会阻止恶意应用程序版本进入客户的设备。

得到奇怪的debugging器消息:断言失败:(cls),函数getName:这是什么?

由于我从Xcode 3.2.3升级到3.2.4和iOS 4.0.1到iOS 4.1 SDK,当我在我的代码中设置一个断点并且单步执行指令时,在每一步中,debugging器将吐出一个或多个线: Assertion failed: (cls), function getName, file /SourceCache/objc4_Sim/objc4-427.1.1/runtime/objc-runtime-new.m, line 3939 它不会发生在特定的行或特定的说明。 我在代码中有几个断点,每当我点击其中一个时,debugging器开始喷出这些消息。 程序正常工作似乎没有任何不利影响。 当有几十条这样的线路时,检索控制台中的信息是非常烦人的。 我相信他们不是什么都没有显示出来,但是我还没有发现问题可能是什么,什么样的指令可能会导致它。 如果我不打断点,那么我没有看到任何这些线。 我做了清理和重build我的项目多次无济于事。 有人知道这是什么吗?

iOS上的可恢复断言/断点,如带MS编译器的__debugbreak()

我试图实现自定义资产macros(类似于什么assert.h),但我希望能够继续执行后,我得到和断言。 例如,一个这样的ASSERT实现可以是: #define ASSERT(expr) ((void)( (!!(expr)) || (__debugbreak(), 0))) __debugbreak是插入软件断点的Microsoft编译器中的一个内部函数,相当于x86中的_asm int 3 。 对于iOS有不同的方式来实现__debugbreak: __asm__("int $3"); 为x86。 __asm__("bkpt #0"); 为了正常的arm。 __asm__("brk #0"); 为arm64 __builtin_trap () raise(SIGTRAP) 但是当我断言,我不能简单地继续下去,继续我在Visual Studio中工作的方式。 当在我的iOS构build断言它卡在断言,我别无select,但终止,我甚至不能手动移动指令指针,并跳过断言。 是否有可能在iOS上执行断言到debugging器的断言,并仍然允许我继续执行?