我正在使用解析1.7.4,这是代码:
+(NSArray *)getCategorieFromParse{
PFQuery *categoriesQuery = [PFQuery queryWithClassName:@"Categorie"];
[categoriesQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error){
if (!error)
return objects;
else
return [[NSArray alloc] init];
}];
}
但这会产生此错误:
不兼容的块指针类型发送'NSArray *(^)(NSArray * __ strong,NSError * __ strong)'到'PFArrayResultBlock __nullable'类型的参数(又名'void(^)(NSArray * __nullable) __strong,NSError * __nullable __strong)')
在返程线
答案 0 :(得分:3)
你的块没有用返回类型声明,它返回一个NSArray *,它是一个返回NSArray *的块。您调用的方法需要一个块返回void。显然你的阻止是不可接受的。
我怀疑对这个块应该做什么有一些深刻的误解。你的方法getCategorieFromParse 不能返回一个数组。它正在发送异步请求,并且在getCategorieFromParse返回后很长时间会调用您的回调块。回调块不应该尝试返回任何内容;它的工作是处理它给出的数组。
答案 1 :(得分:2)
您无法从代码块中返回值。你应该使用delegate(我在谷歌上找到的一个例子)。
答案 2 :(得分:1)
您进行异步调用。你不能同步返回数组。
解决方案:使您的方法也异步:
+(void) getCategorieFromParse:(void (^)(NSArray*))completion
{
PFQuery *categoriesQuery = [PFQuery queryWithClassName:@"Categorie"];
[categoriesQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error){
if (!error)
completion(objects);
else
completion([[NSArray alloc] init]);
}];
}