不兼容的块指针类型?不能 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))
我有一个块我们 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))