Objective C不兼容的块指针类型发送

时间:2015-05-27 13:48:08

标签: objective-c cocoa cocoa-touch parse-platform

我正在使用解析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)')

在返程线

3 个答案:

答案 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]); 

    }]; 
}