试图修复FBSDKEventBindingManager.m错误几天,但仍然很难找到解决方案。
错误:
不兼容的块指针类型将'void (^__strong)(__strong id)‘发送到'swizzleBlock’类型的参数(又称'void (^)(__strong)‘)
这一行=> withBlock:blockToSuperview named:@"map_control"];中的错误
void (^blockToSuperview)(id view) = ^(id view) {
[self matchView:view delegate:nil];
};
void (^blockToWindow)(id view) = ^(id view) {
[self matchView:view delegate:nil];
};
[FBSDKSwizzler swizzleSelector:@selector(didMoveToSuperview)
onClass:[UIControl class]
withBlock:blockToSuperview named:@"map_control"];
[FBSDKSwizzler swizzleSelector:@selector(didMoveToWindow)
onClass:[UIControl class]
withBlock:blockToWindow named:@"map_control"];发布于 2018-08-31 09:39:57
问题是FBSDK在哪里使用typedef来实现swizzleBlock
typedef void (^swizzleBlock)();这可以解释为
typedef void (^swizzleBlock)(void); //void (^)(void) format
第24行这里:
传递的参数是类型的。
void (^blockToSuperview)(id view) = ^(id view) // void (^__strong)(__strong id)'这将导致类型不匹配并显示错误。
不兼容的块指针类型将'void (^__strong)(__strong id)‘发送到'swizzleBlock’类型的参数(又称'void (^)(__strong)‘)
参考这,它将帮助您理解Objective块的不同地方的语法。
您应该更新typedef以匹配传递的块。
typedef void (^swizzleBlock)(id);修复时,这将在一个点上修复错误,但是在同一文件中有许多其他类型的不同格式的块,例如tableViewBlock(第185行)、collectionViewBlock(第200行) 结帐。因此,您必须寻找一些通用的解决方法来修复它。
希望能帮上忙。
https://stackoverflow.com/questions/52073178
复制相似问题