繁体   English   中英

为什么我得到一个“无法识别的选择器发送到实例”错误?

[英]Why am I getting a `unrecognized selector sent to instance` error?

我有一个带有API的Ruby on Rails应用程序,它是一个OAuth 2.0提供程序并使用Doorkeeper。 我正在为该应用程序创建一个iPhone客户端,并使用gtm-oauth2库进行身份验证。 这是iPhone应用程序的Github存储库

我管理使用库执行身份验证请求并从OAuth服务器获取响应,但(我认为)当iPhone应用程序收到响应时,iPhone应用程序崩溃。 我收到以下错误:

2013-03-25 07:30:51.563 Catapult for iOS[68917:c07] -[NSNull length]: unrecognized selector sent to instance 0x14f2678
2013-03-25 07:30:51.564 Catapult for iOS[68917:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull length]: unrecognized selector sent to instance 0x14f2678'
*** First throw call stack:
(0x13c1012 0x11e6e7e 0x144c4bd 0x13b0bbc 0x13b094e 0xf074 0x185e3 0x13b51bd 0x13b50d6 0x1531a 0x1512b 0x14ae2 0x13b51bd 0x13b50d6 0x11d0a 0x1032a 0x13b51bd 0x13b50d6 0x79be 0x77ed 0x8cf2 0xcec589 0xcea652 0xceb89a 0xcea60d 0xcea785 0xc37a68 0x4a2a911 0x4a29bb3 0x4a67cda 0x13638fd 0x4a6835c 0x4a682d5 0x4952250 0x1344f3f 0x1344a39 0x1367734 0x1366f44 0x1366e1b 0x22be7e3 0x22be668 0x12affc 0x2c6d 0x2b95)
libc++abi.dylib: terminate called throwing an exception

在iOS开发和Objective-C编程方面,我是一个完整的菜鸟/初学者,我正在学习如何使用这个小项目创建我的第一个应用程序。 我在gtm-oaut2 Google Group中提出了同样的问题,根据他们的说法,问题来自我的代码而不是库。 问题是我的所有代码都是从他们的wiki中获取的,我无法确定应用程序崩溃的位置。 如果我理解正确,在某些时候我会调用NSNull的length ,但我不是在任何地方调用length ,因此我的困惑。 此外,当应用程序崩溃时,行正常显示在main.m文件中,错误(在右侧标签上,而不在输出中)如下:

Thread 1: signal SIGABRT

我不知道这意味着什么......

有谁知道问题可能是什么?

你是对的,问题是你已经将length消息发送到NSNull一个实例。 要确定究竟发生了什么,请在objc_exception_throw上设置断点。 您可以在Xcode UI中使用断点选项卡左下角的“+”按钮执行此操作。 选择“添加异常断点”。 然后调试器将在发生错误的位置停止程序,而不是等待程序实际崩溃。

嗯...你正确地理解了错误..你在NSNull实例上调用长度。

我必须找出这发生的地方。 我认为这是在JSON响应中发生的。 也许你(或“代码”)在它期望它的NSString东西上调用长度,但它是NSNull (即json具有NULL值)。 如果您设法打印json响应并查看是否找到映射到空值的键,请尝试...

NSNull没有响应长度

您可以查看NSNull的文档 ,看看是否是这种情况。

如果不知道你的代码库在做什么,我不知道在哪里看,你必须调用[NSNull null]; 在某些时候获取NSNull对象或者您正在使用某个返回此框架的框架。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM