前言:前阵子项目刚上线很闲,自己学新东西,突然发现一个很牛的东东——JSPatch, 线上直接改BUG的利器啊(直接用来写模块个人现在还没那技术,而且React native会更好,虽然我不会。),虽然一点都不懂JS,但是不需要审核,直接线上改bug的诱惑太大了,果断花两天时间学了下JS大体懂了,然后开始研究JSPatch。
工具
首先先把几个很好用的工具和文章贴在下面,工欲善其事必先利其器,有了这几个工具和前人经验文章,保证你少走大量弯路.(强烈推荐使用文章里让打开的js断点调试,非常有用!!!)
1、JSPatch专用 OC 转化 JS工具(虽然很多并不准确,不过初学者用它比一下一下打方便多了,可以类似用翻译软件翻译英文一样,先翻译再改不对的地方):JSPatchConvertor
2、JSPatchX —— JSPatch专用Xcode自动补全插件:JSPatchX
3、JSPatch 基础用法 : JSPatch 基础用法
4、JSPatch 常见问题 : JSPatch 常见问题
5、简书上的两篇前辈总结经验:使用JSPatch问题若干及解决方法 iOS开发 — JSPatch
各种坑
(虽然都是因为没有认真仔细看JSPatch基础用法导致的。,原谅我比较心急,直接就像上手开始用)
1.私有成员变量不能直接访问,必须用valueForKey 或者 setValue_forKey调用。比如:
self.valueForKey("_moreModelArray").count(); self.setValue_forKey(NSMutableArray.array(), "_vcArray");
2.JS数组、字典、字符串等等和OC的都不一样
详见工具里面的文章,不具体说了,都是泪
3.JS不能识别枚举,比如:
_pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:0];
UIPageViewControllerTransitionStylePageCurl和UIPageViewControllerNavigationOrientationHorizontal全部都不能识别啊有木有!!!所以我默默的都直接改成了对应的枚举值
var pageViewController = UIPageViewController.alloc().initWithTransitionStyle_navigationOrientation_options(0, 0, 0);
4.必须在require里面声明了相关类,才能使用相应方法,一般写在main.js的最上面,比如:
require('NSMutableArray,NSString,UIPageViewController, NSKeyedUnarchiver, FSProductFirstViewController, FSProductMoreDetailViewController, UIScreen');
- CGRect也是一个坑,最多的是在设置frame的时候,比如:
view.frame.origin.x
在js应该写成:view.frame().x (特别注意不是view.frame().origin().x)
CGRectMake(20, 20, 100, 100)
应该写成:{x:20, y:20, width:100, height:100}
网友评论