【发布时间】:2013-02-25 16:35:22
【问题描述】:
我成功创建了一个包含 LRResty API 以及我自己的许多类、函数等的 iOS 静态库。为了尝试测试我的库,我将它与库头文件一起复制到了一个新的 Xcode 项目中。在这个新的 Xcode 项目中,我调用了我的一个函数,该函数最终调用了 LRResty 函数 [LRRestyClient get:withBlock:]。然后抛出异常 NSInvalidArguementException unrecognized selector sent to instance。有趣的是,我可以右键单击函数(在静态库中)和“跳转到定义”,它知道函数定义的位置。
我知道抛出这个异常的原因有很多,有人知道还有什么原因吗?如果此描述过于模糊,我很乐意提供更多信息。或者任何人都可以向我解释如何将 LRResty 库成功打包到 iOS 静态库中?然后,我将使用此过程将其余的源文件打包在其中。
注意:我是创建静态库的新手,所以我可能忽略了一些非常简单的事情。我按照本教程创建了我的静态库:http://www.icodeblog.com/2011/04/07/creating-static-libraries-for-ios/
感谢您的帮助。
【问题讨论】:
-
当您告诉调试器在抛出异常时中断时,您会看到什么?
-
当我启用异常中断时,调试器会在 [[LRResty client] get:requestURL withBlock:^(LRRestyResponse *response) 行停止。我对汇编不太熟悉,我应该在堆栈跟踪中的汇编中寻找什么吗?
-
我认为查看程序集不会有帮助。但如果我是你,我会查看块和 requestURL,看看我是否可以确定它们是否有任何问题。你得到一个 NSInvalidArgumentException。控制台是否显示有关异常的任何信息?通常,该异常来自操作系统获得错误值。也许如果它告诉你坏数据的地址,你可以检查它并确定可能有什么问题?
-
有趣的是,如果我将 [[LRResty client] get:requestURL withBlock:^(LRRestyResponse *response) 直接放在测试应用的 ViewDidLoad() 函数中并包含 LRResty 标头,我会得到同样的错误。我知道关于静态库的基础知识(无论如何都不是专家)......难道我的库不包含 LRResty 的源代码(.m 文件)吗?
-
好的,找到了我的问题的根源。 LRResty 使用类别,iOS 静态库不能很好地处理类别。看起来我需要包含一些链接器标志来解决问题。解决后我会报告解决方案。
标签: iphone ios objective-c xcode