尝试将FBSDKEventBindingManager.m错误修复几天,但是仍然很难找到解决方案。
错误:
不兼容的块指针类型将'void(^ __ strong)(__ strong id)'发送到类型'swizzleBlock'(又名'void(^)(void)')的参数
此行中的错误=> 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"];
答案 0 :(得分:0)
问题是FBSDK使用typedef的swizzleBlock
typedef void (^swizzleBlock)();
这可以解释为
typedef void (^swizzleBlock)(void); //void (^)(void) format
第24行here:
所传递的参数类型
void (^blockToSuperview)(id view) = ^(id view) // void (^__strong)(__strong id)'
这会导致类型不匹配并向您显示错误
不兼容的块指针类型将'void(^ __ strong)(__ strong id)'发送到类型'swizzleBlock'(又名'void(^)(void)')的参数
请参阅this,它将帮助您在各个方面理解Objective-C块语法。
您应该更新typedef以匹配传递的块。
typedef void (^swizzleBlock)(id);
修复,这将在某个时间点修复错误,但是在同一文件中,还有许多其他类型的块具有不同的格式,例如tableViewBlock(第185行),collectionViewBlock(第200行)checkout here。因此,您将必须寻找一些通用的解决方法来解决它。
希望有帮助。