我有一个块,我们在回调中返回一个数组。然后我创建另一个方法来存储该数组,如下所示:
- (NSArray *)getUserData{
[self fetchDataByUserId:self.userID completionHandler:^(NSArray *record) {
return record;
}];
}
我收到了这种错误,所以请帮助我,我不明白。
"不兼容的块指针类型发送' NSArray *(^)(NSArray * __strong)到类型' void(^)的参数(NSArray * _strong)"
答案 0 :(得分:2)
原因由@ 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];
}
此外,关于错误消息:"不兼容的块指针类型",你应该google"如何在objective-c"中使用Block,例如:http://rypress.com/tutorials/objective-c/blocks
由于您的completionHanler
不是return type block
,因此它是void
阻止。
(void (^)(NSArray *record))
与...不同
(NSArray * (^)(NSArray *record))
答案 1 :(得分:1)
不会立即调用completionHandler
,并且不会返回值。您可以将completionHandler
中的代码视为回调函数。调用者是一些框架代码,只要fetch
完成就会执行。框架代码会调用您的completionHandler
来告知您fetch
已完成,并且不会期望任何返回值。
因此getUserData
方法应该是一个startUserDataFetch
方法,如果实际到达的话,您需要额外的代码来处理数据。