美文网首页
调用.framework类别方法报错unrecognized s

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

作者: Frankkkkk | 来源:发表于2019-08-16 11:40 被阅读0次

    问题描述

    近期利用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参数。
    添加之后,运行成功!
    其实,按方法二添加参数之后,自动会转为方法一的参数。
    综上,推送用方法二!解决此类问题。

    相关文章

      网友评论

          本文标题:调用.framework类别方法报错unrecognized s

          本文链接:https://www.haomeiwen.com/subject/bldfsctx.html