Несовместимые типы указателей блоков, отправляющие «void (^ __ strong) (__ strong id)» параметру типа «swizzleBlock» (он же «void (^) (void)») - PullRequest
0 голосов
/ 29 августа 2018

Попытка исправить проблемы с ошибкой FBSDKEventBindingManager.m в течение нескольких дней, но все еще не удается найти решение.

Ошибка:

Несовместимые типы указателей блоков, отправляющие 'void (^ __ strong) (__ strong id)' параметру типа 'swizzleBlock' (aka '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"];

1 Ответ

0 голосов
/ 31 августа 2018

Проблема в том, что 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' (aka 'void (^) (void)')

См. это , это поможет вам понять синтаксис блока Objective-C в различных точках.

Вы должны обновить typedef, чтобы он соответствовал проходящему блоку.

typedef void (^swizzleBlock)(id);

Исправление, это исправит ошибку в точке, но в том же файле есть много других типов блоков с другим форматом, например tableViewBlock (строка 185), collectionViewBlock (строка 200) извлечение здесь, так что вам придется искать какой-то общий обходной путь, чтобы исправить это.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...