调用.framework类别方法报错unrecognized s

2019-08-16  本文已影响0人  Frankkkkk

问题描述

近期利用cocopods工具做了一个SDK(该SDK是个静态库),想测试一下,当把它放到Demo工程中后pod install,编译运行都没问题,工程目录如下:

SDK目录

但是当调用SDK中分类的方法时,运行报错:

2019-08-16 11:16:29.893229+0800 FanbeiCreditSDKDemo[21342:1396670] 初始化SDK
2019-08-16 11:16:29.898904+0800 FanbeiCreditSDKDemo[21342:1396670] -[__NSFrozenDictionaryM muDao_jsonString]: unrecognized selector sent to instance 0x2814793a0

报错原因是:给NSDictionary对象调用muDao_jsonString方法,方法找不到。该方法是静态库中的NSDictionary分类定义的

网上分享的一般解决办法

通过查资料发现,此类问题的解决方法是:一般在Other Linker Flags中加入-ObjC-all_load-force_load参数
那么,Other Linker Flags到底是用来干什么的呢?还有-ObjC和-all_load到底发挥了什么作用呢?
可以查看这篇文章:https://blog.csdn.net/u012243474/article/details/52619344

我的解决办法

先按照网上的解决办法,在Other Linker Flags中加入-ObjC参数,发现不管用。
方法一:对比正常项目的Other Linker Flags参数

正常项目
通过对比可以发现,每个静态库都配有参数-framework静态库都名称(去掉.framework后缀)
按此种方法给崩溃的项目添加参数,运行成功!

方法二:官方的解决办法
找到了一篇官方的解决办法:https://developer.apple.com/library/archive/qa/qa1490/_index.html
文中的解决办法是:在Other Linker Flags 中增加 $(OTHER_LDFLAGS) -ObjC参数。
添加之后,运行成功!
其实,按方法二添加参数之后,自动会转为方法一的参数。
综上,推送用方法二!解决此类问题。

上一篇 下一篇

猜你喜欢

热点阅读