0

当我启动此 iphone 应用程序时,会在输出控制台中引发此错误:

-[__NSCFString stringValue]: unrecognized selector sent to instance 0x548ad0

并与此线程终止崩溃:

libsystem_kernel.dylib`__kill:
0x360c0840:  mov    r12, #37
0x360c0844:  svc    #128
>> 0x360c0848:  blo    0x360c0860                ; __kill + 32

调试此问题的最佳方法是什么,以便我可以查看问题所在的代码位置?

4

4 回答 4

2

选择断点导航器,这是您的 xcode 导航栏上的第二个选择(在屏幕左侧)

左下角有一个+号,单击并选择添加异常断点。勾选异常断点,异常:ALL,break:抛出,动作:添加动作。(无论如何这应该是默认选择)。单击添加,您的程序现在应该在异常发生的地方停止。

于 2012-09-14T18:54:04.267 回答
0

1) 在 Xcode 中,使用 Breakpoint Navigator 在 Objective-C 异常上设置断点。

2) 寻找您使用的地方stringValue并检查您使用的对象类型是否正确。(它说你已经在一个字符串上调用了它;它应该是别的东西,也许是一个NSNumber?)

3)启用僵尸,以防您认为收到stringValue消息的东西已被提前释放。

于 2012-09-14T18:50:57.050 回答
0

错误消息“unrecognized selector sent to instance XXX”表示应用正在尝试调用不存在的方法。经常发生这种情况是因为在错误的对象上调用了该方法。这里,有问题的对象是 NSString(位于内存地址 0x548ad0),方法是 stringValue:

找出代码中发生此错误的位置。您需要找到源文件的名称和行为异常的行号。您可以使用调用堆栈(也称为堆栈跟踪或回溯)来执行此操作。

如果我们保留断点,每当应用程序崩溃时,Xcode 窗口的左窗格就会切换到 Debug Navigator。它显示应用程序中处于活动状态的线程,并突出显示崩溃的线程。

于 2012-09-15T05:40:04.293 回答
0

您正在尝试在对象上调用stringValue方法。NSString这行不通。你还没有发布任何代码,但我假设你做了这样的事情:

NSString *str1 = <#you get your string from somewhere#>;
NSString *str2 = [str1 stringValue]; //crash

要本地化崩溃,请设置异常断点或仅stringValue在项目中查找调用。

于 2012-09-14T18:49:59.690 回答