不兼容的块指针类型?不能返回NSArray
我有一个块,我们在回调中返回一个数组。然后我创建另一种方法来存储该阵列如下:不兼容的块指针类型?不能返回NSArray
- (NSArray *)getUserData{
[self fetchDataByUserId:self.userID completionHandler:^(NSArray *record) {
return record;
}];
}
我收到这种错误,所以请帮助我,我不明白。
“不兼容的块指针类型发送 '的NSArray *(^)(的NSArray * __strong)至类型的参数' 无效(^)(的NSArray * _strong)”
原因由@ 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];
}
此外,有关该错误信息: “不兼容的块指针”,你应该谷歌,前 “如何在Objective-C使用块”:http://rypress.com/tutorials/objective-c/blocks
因为您的completionHanler
不是return type block
,所以它是void
区块。
(void (^)(NSArray *record))
是 (NSArray * (^)(NSArray *record))
的completionHandler
不立即调用,而不是预计会返回一个价值。您可以将completionHandler
中的代码视为回调函数。调用者是在fetch
完成时执行的一些框架代码。框架代码调用您的completionHandler
以通知您fetch
已完成,并且不期望任何返回值。
因此,getUserData
方法应该确实是一个startUserDataFetch
方法,并且您需要额外的代码来处理数据,如果有的话/每当它实际到达时。
谢谢你这么多的不同,我实际上是由你的答案更加了解块。每当我有足够的点数,我会投票给你:) – lionK 2015-02-24 05:46:28
谢谢你的解释,这是非常详细的。但是我应该怎么做才能有一个方法从这个获取中获取数据。一些如: - (NSArray *)userDataLoaded; – lionK 2015-02-24 05:27:41
仅当您的fetchData方法可以返回NSArray而不是Block时。例如:NSArray * record = [self fetchDataByUserId];退货记录; – 2015-02-24 08:04:22