1

我有一个 Ruby on Rails 应用程序,它有一个 API,它是一个 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,我无法确定应用程序崩溃的位置。如果我理解正确,在某些时候我会调用lengthNSNull,但我没有length在任何地方调用,因此我很困惑。此外,当应用程序崩溃时,突出显示的行位于 main.m 文件中,错误(在右侧标签上,不在输出中)如下:

Thread 1: signal SIGABRT

我不知道那是什么意思...

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

4

3 回答 3

4

你是对的,问题是在某个地方你已经将length消息发送到NSNull. 要查明发生这种情况的确切位置,请在 objc_exception_throw 上设置断点。您可以在 Xcode UI 中使用断点选项卡左下角的小“+”按钮执行此操作。选择“添加异常断点”。然后调试器将在发生错误的地方停止您的程序,而不是等待程序实际崩溃。

于 2013-03-25T08:01:08.020 回答
0

嗯......你正确理解了这个错误......你在某个地方调用了一个 NSNull 实例的长度。

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

于 2013-03-25T07:59:52.533 回答
0

NSNull 不响应长度

您可以查看 NSNull 的文档以了解情况是否如此。

在不知道您的代码库在做什么的情况下,我不确定在哪里看,您必须调用 [NSNull null]; 在某些时候获取 NSNull 对象,或者您在某处使用返回此对象的框架。

于 2013-03-25T09:27:12.593 回答