美文网首页
非典型八阿哥

非典型八阿哥

作者: 勇敢的呆喵 | 来源:发表于2017-03-21 17:30 被阅读83次
八阿哥一号:

有没有这种神奇的体验, 页面A push 页面B 之后在B页面侧滑一丢丢, 再松手这时还在B页面, 点击左上角导航栏返回键, 不能返回A页面了! 就像中了邪一样, 导航栏倒是在滚动, 但是页面还是B啊

you see see:
注意导航栏.gif

无数次谷哥+度娘, 无数次折腾之后找到的解决方法:

    [self.navigationController setNavigationBarHidden:NO animated:YES];

对, 就是这么流比, 一个字母都不能错, 错了就回不去了, 你可以不信我, 自己慢慢去爬坑😑

推测:

系统侧滑手势对导航栏有特殊处理,在滑了一部分未达到返回或翻页的临界值时,
侧滑手势对导航栏的控制器栈进行了处理, 而这种处理方式导致的导航栏栈的变化不能被传统设置导航栏的方法准确辨识出来;
[self.navigationController setNavigationBarHidden:NO animated:YES];这个方法的动画实现可能和侧滑手势原理有一定共通, 所以可以处理侧滑手势改变后的栈;

八阿哥二号:

背景:
我们的项目要使用微信支付,但是运营申请不下来微信支付资质, 于是辗转和某银行(以下简称Z银行)合作, 由银行提供包装后的微信支付的SDK给我们用;

在笔者多次尝试, 对比, 写demo, 都不能解决问题之后, 整理了一份这个问题的PDF文件, 向Z银行对接的技术寻求帮助, 毕竟一个项目不能因为我不行就不用微信支付了吧;

如下图,详细说明问题, 并指出我发现的问题所在, 寄希望于对方能提供新的SDK:


问题描述1.png
问题描述2.png

对方人很好,积极配合解决问题,但是就是没说重新提供SDK...

对方给的解决方案是linker里面加-ObjC如下图,


银行技术给的解决方案.png

询问缘由,是这么解释的:

"我们的SDK里面是静态库,在静态库里面的有类目,所以必须在linker里面加-ObjC,不然程序会找不到类目里面的方法"

很好, 积极帮我解决问题, 也提出了解决办法, 口头给这位宝宝点个赞👍;
但是, 并没有解决问题啊,加-OjbC并没有用啊;
最终在同事的帮助下, 使用-force_load 强制加载Z银行提供的静态库, 成功解决问题😊;
如下图:


force_load.png

又是一通谷哥+度娘之后, 找到以下有用信息:

Targets选项下有Other linker flags的设置,用来填写XCode的链接器参数,如:-ObjC -all_load -force_load等。
Other linker flags设置的值实际上就是ld命令执行时后面所加的参数。

3个常用参数:

-ObjC:加了这个参数后,链接器就会把静态库中所有的Objective-C类和分类都加载到最后的可执行文件中;

-all_load:会让链接器把所有找到的目标文件都加载到可执行文件中,但是千万不要随便使用这个参数!假如你使用了不止一个静态库文件,然后又使用了这个参数,那么你很有可能会遇到ld: duplicate symbol错误,因为不同的库文件里面可能会有相同的目标文件,所以建议在遇到-ObjC失效的情况下使用-force_load参数;

-force_load:所做的事情跟-all_load其实是一样的,但是-force_load需要指定要进行全部加载的库文件的路径,这样的话,你就只是完全加载了一个库文件,不影响其余库文件的按需加载;

小Tips:

-force_load 正确使用方法, -force_load + 空格 + 要强制加载的文件路径, 比如:
-force_load $(SRCROOT)/Name/Third/libSPaySDK.a

相关文章

网友评论

      本文标题:非典型八阿哥

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