CC论坛

 找回密码
 立即注册
查看: 1088|回复: 0

[CCNamer] 方法名误改或出错的解决方法

[复制链接]

56

主题

57

帖子

339

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
339
发表于 2020-2-21 20:20:52 | 显示全部楼层 |阅读模式
为什么会出现误改呢?

改方法名原理是通过解析代码文件内容,通过匹配旧方法名称来进行替换,虽然通过代码模型进来进行预判,可以减少误改的机率,但是不能杜绝。
比如我要将下面的方法
  1. /// 某个类中的方法
  2. - (nullable NSString *)valueForHTTPHeaderField:(NSString *)field;
复制代码

改名成
  1. - (nullable NSString *)testMobile:(NSString *)field;
复制代码

自动修改调用处的方法名时,在其他代码块中存在这一段代码
  1. if (parameters) {
  2.   if (![mutableRequest <font color="#ff0000">valueForHTTPHeaderField</font>:@"Content-Type"]) {
  3.             [mutableRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
  4.         }
复制代码

这时有可能出现误改,将上面的代码改为以下代码
  1. if (parameters) {
  2.    if (![mutableRequest <font color="#ff0000">testMobile</font>:@"Content-Type"]) {
  3.             [mutableRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
  4.         }
复制代码

误改还原

出现上面的误改后,一般Xcode提示如下错误


这时你就需要手动还原代码,需要用到一个很重要文件(MethodReplaceList.txt)这个文件存放在你所选的项目的路径下,是新旧方法名对照表,这时你需要打此文件搜索 testMobile 来查找原始名称

注意上图中 testMobile 在第几个冒号前,在原始方法名中一样位置的才是与 testMobile 对应的

找到原始方法名,我们就可以将方法名手动改回来:
testMobile --> valueForHTTPHeaderField
  1. if (parameters) {
  2.   if (![mutableRequest <font color="#ff0000">valueForHTTPHeaderField</font>:@"Content-Type"]) {
  3.             [mutableRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
  4.         }
复制代码

注意: 不要使用Xcode进行全局修改,这样的话你把所有的地方都还原了相当于没改,我们只需要把误改的方改回来即可。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|粤ICP备19105948号|CC论坛

GMT+8, 2023-3-28 16:40

快速回复 返回顶部 返回列表