【问题标题】:Getting Error: "Incompatible block pointer types sending 'void(^)"?出现错误:“不兼容的块指针类型发送'void(^)”?
【发布时间】:2015-11-22 01:14:57
【问题描述】:

我正在使用下面的代码来验证我的 Shopify 结帐是否成功...但是行:

 [self.client getCompletionStatusOfCheckout:self.checkout
 completion:^(BUYCheckout *checkout, BUYStatus status, NSError *error)
 {

给我一​​个最奇怪的错误:

"不兼容的块指针类型发送 'void(^)(BUYCheckout *___Strong, BUYStatus, NSError *___Strong' 到参数类型'BUYDataCheckoutStatusBlock''

我该如何解决这个问题?这是什么意思?如果您需要更多代码/详细信息,请告诉我。干杯。

.h

@property (nonatomic, strong) BUYClient *client;

.m

-(void)verifyCheckout{

    __block BUYStatus buyStatus = BUYStatusUnknown;
    __block BUYCheckout *completedCheckout = self.checkout;
    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
    do {

        [self.client getCompletionStatusOfCheckout:self.checkout completion:^(BUYCheckout *checkout, BUYStatus status, NSError *error) {
            completedCheckout = checkout;
            buyStatus = status;
            dispatch_semaphore_signal(semaphore);
        }];
        dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
        if (buyStatus == BUYStatusProcessing) {
            [NSThread sleepForTimeInterval:0.5];
        } else {

        }

    } while (completedCheckout.token && buyStatus != BUYStatusFailed && buyStatus != BUYStatusComplete);

}

【问题讨论】:

  • 使用BUYDataCheckoutStatusBlockgetCompletionStatus: 方法的声明更新您的问题。

标签: ios objective-c


【解决方案1】:

Shopify 文档说完成块只接受两个参数:

typedef void (^BUYDataCheckoutStatusBlock)(BUYStatus status, NSError *error);

所以这条线

 [self.client getCompletionStatusOfCheckout:self.checkout
 completion:^(BUYCheckout *checkout, BUYStatus status, NSError *error)
 {

应该是

[self.client getCompletionStatusOfCheckout:self.checkout
 completion:^(BUYStatus status, NSError *error)
 {

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多