如何修复不兼容的块指针类型发送错误?

Posted

技术标签:

【中文标题】如何修复不兼容的块指针类型发送错误?【英文标题】:How to fix the incompatible block pointer types sending error? 【发布时间】:2020-07-09 11:19:03 【问题描述】:

由于不兼容的块指针类型在 xcode 11.5 中发送错误,构建失败。

- (NSURLSessionDataTask *)retrieveSourceWithId:(NSString *)identifier 
    clientSecret:(NSString *)secret 
    responseCompletion:(STPAPIResponseBlock)completion 
    NSString *endpoint = [NSString stringWithFormat:@"%@/%@", 
        APIEndpointSources, identifier];
    NSDictionary *parameters = @@"client_secret": secret;
    return [STPAPIRequest<STPSource *> getWithAPIClient:self

                                           endpoint:endpoint

                                         parameters:parameters

                                       deserializer:[STPSource new]

                                         completion:completion];


【问题讨论】:

不是最新的 objc 但似乎您尝试将 STPAPIResponseBlock 传递给不匹配的函数参数。 STAPIResponseBlock 可能是专用块的类型别名,getWithApiClient 方法需要 completion 参数的另一种块 【参考方案1】:

观察错误中描述的两种类型的块之间的差异。

你正在发送

STPAPIResponseBlock又名^(ResponseType, NSHTTPURLResponse, NSError)

预期类型是:

^(STPSource, NSHTTPURLResponse, NSError)

STPAPIResponseBlock的第一个参数不兼容。

不过看起来这可能是bug in the Stripe API

确认您拥有14.0.1 或更高版本的库。这可能会解决问题。

【讨论】:

问题是由于 StripeAPI 因为 Xcode 11 构建成功。

以上是关于如何修复不兼容的块指针类型发送错误?的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 7 - 不兼容的块指针类型

不兼容的块指针类型将“int (^)(__strong id, __strong id)”发送到“NSComparator”类型的参数

iOS不兼容的块指针类型问题

使用 typedef 的不兼容的块指针类型

iOS - AFNetworking GET 方法中不兼容的块指针类型

如何修复错误不兼容的数据类型组合 [SQL State=42562, DB Errorcode=-5562]