不兼容的指针类型 - 向参数类型void NSArray发送void

时间:2015-03-04 18:44:27

标签: ios objective-c objective-c-blocks

- (void)restorePurchasesButtonTapped {

    [soundManager playTapSound];
    persistor = [RMStore defaultStore].transactionPersistor;

    [[RMStore defaultStore] restoreTransactionsOnSuccess:^{

        if ([persistor isPurchasedProductOfIdentifier:@"RemoveAds"]) {
            [SVProgressHUD showSuccessWithStatus:@"Purchases restored, ads removed!"];
            [FXKeychain defaultKeychain][@"AdsRemoved"] = [NSNumber numberWithBool:YES];
        } else {
            [SVProgressHUD showErrorWithStatus:@"Looks like you don't have any previous purchases!"];
        }


    } failure:^(NSError *error) {
        [SVProgressHUD showErrorWithStatus:@"Problem restoring purchases"];
    }];


}

编辑:很抱歉没有明确问题。我收到的错误如下:“不兼容的块指针类型向'void(^)NSArray * __ strong'类型的参数发送'void'(^)(void)

我没有返回一个数组,但是bug中提到了NSArray。如果我可以提供更多信息,请告诉我,有点新的编码和尝试修复别人的代码项目中的错误,所以我对代码没有很好的理解

2 个答案:

答案 0 :(得分:0)

听起来restoreTransactionsOnSuccess期待一个不同的块参数。

尝试:

[[RMStore defaultStore] restoreTransactionsOnSuccess:^(NSArray *transactions){

答案 1 :(得分:0)

类型void (^)(void)是对块((^))的引用,它不带任何参数((void))并且不返回任何内容(void)。该错误表明这是您提供的内容,它与void (^)(NSArray * __strong)的参数类型不兼容 - 这是对带有数组并且不返回任何内容的块的引用。您调用的方法的定义是:

- (void)restoreTransactionsOnSuccess:(void (^)(NSArray *transactions))successBlock
                             failure:(void (^)(NSError *error))failureBlock;

您需要提供一个成功的块,它接受一个NSArray *作为参数,例如:

^ (NSArray *transactions) { ... }

HTH