不兼容的块指针类型?不能 return NSArray

Incompatible block pointer type? Cannot return NSArray

我有一个块我们 return 回调中的一个数组。然后我创建另一种方法来存储该数组,如下所示:

- (NSArray *)getUserData{

[self fetchDataByUserId:self.userID completionHandler:^(NSArray *record) {
    return record;
}];
}

我收到这种错误所以请帮助我,我不明白。

"Incompatible block pointer types sending 'NSArray *(^)(NSArray * __strong) to parameter of type 'void (^)(NSArray *_strong)"

completionHandler 不会立即被调用,并且不会期望 return 一个值。您可以将 completionHandler 中的代码视为回调函数。调用者是在 fetch 完成时执行的一些框架代码。框架代码调用您的 completionHandler 让您知道 fetch 已完成,并且不需要任何 return 值。

因此 getUserData 方法实际上应该是一个 startUserDataFetch 方法,并且您需要额外的代码来处理数据(如果有/无论何时实际到达)。

@user3386109解释了原因,这才是正确的做法。

- (void)getUserData:(void (^)(NSArray *record))complete {

    [self fetchDataByUserId:self.userID completionHandler:^(NSArray *record) {
        complete(record);
    }];

}

- (void)getUserData:(void (^)(NSArray *record))complete {

    [self fetchDataByUserId:self.userID completionHandler:complete];

}

此外,关于错误消息:"Incompatible block pointer type",您应该google "How to use Block in objective-c",例如:http://rypress.com/tutorials/objective-c/blocks

因为你的 completionHanler 不是 return type block,而是 void 块。

(void (^)(NSArray *record)) 与不同 (NSArray * (^)(NSArray *record))