JSPatch 动态更新,bug修复
本文贴出项目中热修复的代码片段:
require('UIView, JPObject, HtmlAllViewController,DataManager,EMClient,EaseMessageViewController')
defineClass("GHAcceptOrderViewController", {
tableView_willSelectRowAtIndexPath: function(tableView, indexPath) {
var row = indexPath.row();
var dataArr = self.sourceArr().toJS();
var vo = dataArr[row];
if (vo.type() == && vo.status() == ) {
return null;
}
return indexPath;
},
})
defineClass("HomePageViewController", {
clickIndex: function(index) {
var data = self.valueForKey("homeVO");
var dataArr = data.banners().toJS(); if (dataArr&&dataArr.length>index) {
var vo = dataArr[index];
if (vo.type()) {
if (vo.type() == ) { self.recharge();
}
}
if(vo.linkUrl()&&vo.linkUrl().length()>){ var ctrl = HtmlAllViewController.alloc().init();
var token = DataManager.getInstance().user().token();
var header = vo.linkUrl().toJS() + "?token=" + token.toJS(); ctrl.setValue_forKey(header,"mUrl");
ctrl.setValue_forKey(vo.name(),"mTitle");
self.navigationController().pushViewController_animated(ctrl,true);
}
}
},
onFloatImage: function(tap) {
var vo = DataManager.getInstance().user();
self.view().setUserInteractionEnabled(false); var weakSelf = __weak(self);
var success = block(function(){ weakSelf.view().setUserInteractionEnabled(true); var ctrl = EaseMessageViewController.alloc().initWithConversationChatter_conversationType("pinjian001",);
var dict = require("NSMutableDictionary").alloc().init();
dict.setObject_forKey("我", "senderName");
if(vo.avatar()){
dict.setObject_forKey(vo.avatar(), "senderAvatar");
}else{
dict.setObject_forKey("order_expert_desc_icon_bgImage.png", "senderAvatar");
}
dict.setObject_forKey("品简客服", "receiverName");
dict.setObject_forKey("doctor_defalt_icon.png", "receiverAvatar"); ctrl.setValue_forKey("咨询医生","title");
ctrl.setValue_forKey(dict,"pinjian"); weakSelf.navigationController().pushViewController_animated(ctrl,true);
}); var failure = block("EMError *", function(aError){
weakSelf.view().setUserInteractionEnabled(true);
}); EMClient.sharedClient().asyncLoginWithUsername_password_success_failure(vo.hxUsername(),vo.hxPassword(),success,failure); },
readMessage:function(notification){
self.tabBarItem().setBadgeValue(null);
self.showMessage(false);
},
})
需要特别说明的是:
1.oc里的属性访问在 js 这一定要通过.() 访问;
2.oc里的数据在 js 端调用,一定要通过 .toJS() 转换成 js数据类型;
3.oc里的block 在js 这端,如上方代码所示,特别注意下传参的格式;
4.oc里的block 在js端调用,必须要通过弱引用修饰,然后在block里用weakSelf,上方代码所示:
var weakSelf = __weak(self);
5.用到的头文件一定要require();
建议:先本地setupDevelopment 调试,调试成功后,多次检查无误后,再发布全局。
另外:关于jspatch 断点调试:https://github.com/bang590/JSPatch/wiki/JS-%E6%96%AD%E7%82%B9%E8%B0%83%E8%AF%95
更多了解:
http://www.jianshu.com/p/0cb81bf23d7a
http://blog.cnbang.net/works/2767/
http://www.cnblogs.com/dsxniubility/p/5080875.html
JSPatch 动态更新,bug修复的更多相关文章
- JSPatch – 动态更新iOS APP
原文:http://blog.cnbang.net/works/2767/ JSPatch是最近业余做的项目,只需在项目中引入极小的引擎,就可以使用JavaScript调用任何Objective-C的 ...
- JSPatch动态更新APP
JSPatch,只需在项目中引入极小的引擎,就可以使用JavaScript调用任何Objective-C的原生接口,获得脚本语言的能力:动态更新APP,替换项目原生代码修复bug. 用途 是否有过这样 ...
- IOS App动态更新
框架 JSPatch WaxPatch react-native 方案对比 目前已经有一些方案可以实现动态打补丁,例如WaxPatch,可以用Lua调用OC方法,相对于WaxPatch,JSPat ...
- RHSA-2017:2473-重要: 内核 安全和BUG修复更新(需要重启、存在EXP、本地提权)
[root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 修复命令: 使用root账号登陆She ...
- RHSA-2017:2029-中危: openssh 安全和BUG修复更新(存在EXP、代码执行、本地提权)
[root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 修复命令: 使用root账号登陆She ...
- RHSA-2017:2930-重要: 内核 安全和BUG修复更新(需要重启、存在EXP、本地提权、代码执行)
[root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 修复命令: 使用root账号登陆She ...
- RHSA-2017:2299-中危: NetworkManager 和 libnl3 安全和BUG修复更新(本地提权、代码执行)
[root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 修复命令: 使用root账号登陆She ...
- RHSA-2017:1842-重要: 内核 安全和BUG修复更新(需要重启、存在EXP、本地提权、代码执行)
[root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 修复命令: 使用root账号登陆She ...
- RHSA-2018:3032-低危: binutils 安全和BUG修复更新
[root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 修复命令: 使用root账号登陆She ...
随机推荐
- poj 2299 Ultra-QuickSort(归并排序或是bit 树+离散化皆可)
题意:给一个数组,计算需要的冒泡排序的次数,元素个数很大,不能用n^2的冒泡排序计算. 解析:这题实际上就是求逆序对的个数,可以用归并排序的方法,我这里用另一种方法写,bit树+离散化.由于元素的值可 ...
- pythonBasic
1,judgment in deciding(if...:,if..else:,if else...else:),loop(for...:,while True...:) break,continu ...
- ACM学习-POJ-1143-Number Game
菜鸟学习ACM,纪录自己成长过程中的点滴. 学习的路上,与君共勉. ACM学习-POJ-1143-Number Game Number Game Time Limit: 1000MS Memory ...
- myeclipse集成weblogicserver
今天为了学一下JMS的东东, 不得不安装个weblogicserver, 下面是详细的安装步骤: 1. 首先去官网下载一个weblogic: 下载地址: http://download.oracle. ...
- java学习笔记day01
1.Java JDK:简称为java开发工具集 2.下载JDK后安装,可以下载绿色版本,即不用安装,直接将其放在磁盘根目录 如:C:\Java\jdk1.6.0_10 3.在任意磁盘路径下都可以编译 ...
- mysq优化
MySQL调优可以从几个方面来做:1. 架构层:做从库,实现读写分离: 2.系统层次:增加内存:给磁盘做raid0或者raid5以增加磁盘的读写速度:可以重新挂载磁盘,并加上noatime参数,这样可 ...
- 数据结构算法应用C++语言描述——(1)C++基础知识
一.二维数组 (1)二维数组的列是固定时,行未知时使用动态分配 当一个二维数组每一维的大小在编译时都是已知时,可以采用类似于创建一维数组的语法 来创建二维数组.例如,一个类型为char的7×5数组可用 ...
- Windows下Vundle安装
鼠标手老是发作,没办法.想学习vim尽量减少编码时使用鼠标的频率.安装好gVim开始安装Vundle插件,总结下安装过程和各种遇到的坑: github上VundleVim倒是有说明 Windows S ...
- [转载]ACM(访问控制模型),Security Identifiers(SID),Security Descriptors(安全描述符),ACL(访问控制列表),Access Tokens(访问令牌)
对于<windows核心编程>中的只言片语无法驱散心中的疑惑.就让MSDN中的解释给我们一盏明灯吧.如果要很详细的介绍,还是到MSDN仔细的看吧,我只是大体用容易理解的语言描述一下. wi ...
- MFC CSplitterWnd的用法
用MFC开发一个软件界面中需要拆分多个试图窗口时,使用CSplitterWnd类 CSplitterWnd类主要用在创建一个拆分试图窗口.通常嵌入在框架窗口中(CMainFrame) 创建步骤: 1 ...