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