首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不兼容的块指针类型将'void (^__strong)(__strong id)‘发送到'swizzleBlock’类型的参数(又称'void (^)(__strong)‘)

不兼容的块指针类型将'void (^__strong)(__strong id)‘发送到'swizzleBlock’类型的参数(又称'void (^)(__strong)‘)
EN

Stack Overflow用户
提问于 2018-08-29 08:44:17
回答 1查看 5.4K关注 0票数 1

试图修复FBSDKEventBindingManager.m错误几天,但仍然很难找到解决方案。

错误:

不兼容的块指针类型将'void (^__strong)(__strong id)‘发送到'swizzleBlock’类型的参数(又称'void (^)(__strong)‘)

这一行=> withBlock:blockToSuperview named:@"map_control"];中的错误

代码语言:javascript
运行
复制
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"];
EN

回答 1

Stack Overflow用户

发布于 2018-08-31 09:39:57

问题是FBSDK在哪里使用typedef来实现swizzleBlock

代码语言:javascript
运行
复制
typedef void (^swizzleBlock)();

这可以解释为

typedef void (^swizzleBlock)(void); //void (^)(void) format

第24行这里

传递的参数是类型的。

代码语言:javascript
运行
复制
void (^blockToSuperview)(id view) = ^(id view) // void (^__strong)(__strong id)'

这将导致类型不匹配并显示错误。

不兼容的块指针类型将'void (^__strong)(__strong id)‘发送到'swizzleBlock’类型的参数(又称'void (^)(__strong)‘)

参考,它将帮助您理解Objective块的不同地方的语法。

您应该更新typedef以匹配传递的块。

代码语言:javascript
运行
复制
typedef void (^swizzleBlock)(id);

修复时,这将在一个点上修复错误,但是在同一文件中有许多其他类型的不同格式的块,例如tableViewBlock(第185行)、collectionViewBlock(第200行) 结帐。因此,您必须寻找一些通用的解决方法来修复它。

希望能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52073178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档