JSPatch使用 私有变量操作

基本使用

私有成员变量获取与修改,及数组的获取与修改

栗子: 账户页面列表中,由于上新版本时中间插入了一行,但是忘记了最后一行的赋值,所以需要对tableView数据源的最后一行数据进行修改,及刷新表单。当然不能修改其他数据

      - (void)myAccountInfoHandle:(NSInteger)code responseObject:(id)responseObject {
 //先执行原有方法的内容
    if (code == 0) {
        _dataSource[5] = responseObject[@"data"][@"amount"];
        [_tableView reloadData];
    }
}

oc代码如此简单,下面js 坑的地方,主要是数据源数组、表单都是私有变量

    defineClass('MyAccountVC', {
        myAccountInfoHandle_responseObject: function(code, responseObject) {
          //调用原有方法
          self.ORIGmyAccountInfoHandle_responseObject(code,responseObject);
          if (code == 0) {//数据正常时,才进行赋值刷新操作
              var data = self.valueForKey('_dataSource');//获取私有变量数组
              var acc = responseObject.valueForKey('data');//获取字典
              //先获取字典中的amount值,然后替换数组中第5个元组
              data.replaceObjectAtIndex_withObject(5,acc.objectForKey('amount'));
              var mytable = self.valueForKey('_tableView');//获取私有变量tableView
              mytable.reloadData();//刷新表单
          }
}}, {});

另一种方法,插入一条数据在第一个,删除最后一条数据

      - (void)myAccountInfoHandle:(NSInteger)code responseObject:(id)responseObject {
 //先执行原有方法的内容
    if (code == 0) {
        [_dataSource insertObject:@"" atIndex:0];
        [_dataSource removeLastObject];
        [_tableView reloadData];
    }
}
    defineClass('MyAccountVC', {
        myAccountInfoHandle_responseObject: function(code, responseObject) {
          //调用原有方法
          self.ORIGmyAccountInfoHandle_responseObject(code,responseObject);
          if (code == 0) {//数据正常时,才进行赋值刷新操作
              var data = self.valueForKey('_dataSource');//获取私有变量数组
              data.data.insertObject_atIndex('',0);//插入元素到第一个
              data.removeLastObject();//删除数组最后一个元素
              var mytable = self.valueForKey('_tableView');//获取私有变量tableView
              mytable.reloadData();//刷新表单
          }
}}, {});

2022-08-01 07:46:33