Closed zhudaye12138 closed 8 years ago
若修改父类中的A函数,而它的子类又没有被lua修改时。调用子类会崩溃,错误是子类里面没有A函数。
原因: waxDefinedSelectorClassDictionary 里没有注册子类
修改方法: 修改 isClassSelectorDefinedInWax函数
`BOOL isClassSelectorDefinedInWax(NSString klassStr, NSString selStr){ if(klassStr == nil || selStr == nil) return NO;
BOOL isDefined = NO; if(waxDefinedSelectorClassDictionary){ //derived calss forwarding selector will use base class's forwarding BOOL hasInWax = waxDefinedSelectorClassDictionary[klassStr]; while (!hasInWax && ![klassStr isEqualToString:@"NSObject"]) { klassStr =[NSString stringWithFormat:@"%@", [NSClassFromString(klassStr) superclass]]; hasInWax = waxDefinedSelectorClassDictionary[klassStr]; }//fix crash while (!isDefined && hasInWax) { NSArray *replaceMethodList = waxDefinedSelectorClassDictionary[klassStr]; for(NSDictionary *dict in replaceMethodList){ NSString *tmpClassStr = dict[@"class"]; NSString *tmpSelStr = dict[@"sel"]; if(tmpClassStr && [tmpClassStr isEqualToString:klassStr] && tmpSelStr && [tmpSelStr isEqualToString:selStr]){ isDefined = YES; break; } }//for if(!isDefined){ Class klassSuper = [NSClassFromString(klassStr) superclass]; klassStr = NSStringFromClass(klassSuper); } } } return isDefined;
}`
不知道这样处理会不会有其他的问题?
若修改父类中的A函数,而它的子类又没有被lua修改时。调用子类会崩溃,错误是子类里面没有A函数。
原因: waxDefinedSelectorClassDictionary 里没有注册子类
修改方法: 修改 isClassSelectorDefinedInWax函数
`BOOL isClassSelectorDefinedInWax(NSString klassStr, NSString selStr){ if(klassStr == nil || selStr == nil) return NO;
}`
不知道这样处理会不会有其他的问题?