Objective c 不兼容的块指针类型?无法返回NSArray

Objective c 不兼容的块指针类型?无法返回NSArray,objective-c,nsarray,objective-c-blocks,Objective C,Nsarray,Objective C Blocks,我有一个块,我们在回调中返回一个数组。然后我创建另一个方法来存储该数组,如下所示: - (NSArray *)getUserData{ [self fetchDataByUserId:self.userID completionHandler:^(NSArray *record) { return record; }]; } 我收到了这种错误,所以请帮助我,我不明白 “不兼容的块指针类型将'NSArray*(^)(NSArray*\u strong)发送到'void(^)(NSArr

我有一个块,我们在回调中返回一个数组。然后我创建另一个方法来存储该数组,如下所示:

- (NSArray *)getUserData{

[self fetchDataByUserId:self.userID completionHandler:^(NSArray *record) {
    return record;
}];
}
我收到了这种错误,所以请帮助我,我不明白


“不兼容的块指针类型将'NSArray*(^)(NSArray*\u strong)发送到'void(^)(NSArray*\u strong)类型的参数”

不会立即调用
completionHandler
,也不会返回值。您可以将
completionHandler
中的代码视为回调函数。调用者是某个框架代码,每当
fetch
完成时执行。框架代码调用您的
completionHandler
,让您知道
fetch
已完成,不需要任何返回值


因此,
getUserData
方法实际上应该是一个
startUserDataFetch
方法,如果数据实际到达,您需要额外的代码来处理数据。

不会立即调用
completionHandler
,也不会返回值。您可以将
completionHandler
中的代码视为回调函数。调用者是某个框架代码,每当
fetch
完成时执行。框架代码调用您的
completionHandler
,让您知道
fetch
已完成,不需要任何返回值


因此,
getUserData
方法实际上应该是一个
startUserDataFetch
方法,如果数据实际到达,您需要额外的代码来处理数据。

不会立即调用
completionHandler
,也不会返回值。您可以将
completionHandler
中的代码视为回调函数。调用者是某个框架代码,每当
fetch
完成时执行。框架代码调用您的
completionHandler
,让您知道
fetch
已完成,不需要任何返回值


因此,
getUserData
方法实际上应该是一个
startUserDataFetch
方法,如果数据实际到达,您需要额外的代码来处理数据。

不会立即调用
completionHandler
,也不会返回值。您可以将
completionHandler
中的代码视为回调函数。调用者是某个框架代码,每当
fetch
完成时执行。框架代码调用您的
completionHandler
,让您知道
fetch
已完成,不需要任何返回值


因此
getUserData
方法实际上应该是一个
startUserDataFetch
方法,如果数据实际到达,您需要额外的代码来处理数据。

原因由@user3386109解释,这是正确的方法

- (void)getUserData:(void (^)(NSArray *record))complete {

    [self fetchDataByUserId:self.userID completionHandler:^(NSArray *record) {
        complete(record);
    }];

}

此外,关于错误消息:“不兼容的块指针类型”,您应该在google上搜索“如何在objective-c中使用块”,例如:

因为您的
completionHanler
不是
返回类型块
,所以它是
void

(作废(^)(NSArray*记录))
不同于
(NSArray*(^)(NSArray*记录))

原因由@user3386109解释,这是正确的方法

- (void)getUserData:(void (^)(NSArray *record))complete {

    [self fetchDataByUserId:self.userID completionHandler:^(NSArray *record) {
        complete(record);
    }];

}

此外,关于错误消息:“不兼容的块指针类型”,您应该在google上搜索“如何在objective-c中使用块”,例如:

因为您的
completionHanler
不是
返回类型块
,所以它是
void

(作废(^)(NSArray*记录))
不同于
(NSArray*(^)(NSArray*记录))

原因由@user3386109解释,这是正确的方法

- (void)getUserData:(void (^)(NSArray *record))complete {

    [self fetchDataByUserId:self.userID completionHandler:^(NSArray *record) {
        complete(record);
    }];

}

此外,关于错误消息:“不兼容的块指针类型”,您应该在google上搜索“如何在objective-c中使用块”,例如:

因为您的
completionHanler
不是
返回类型块
,所以它是
void

(作废(^)(NSArray*记录))
不同于
(NSArray*(^)(NSArray*记录))

原因由@user3386109解释,这是正确的方法

- (void)getUserData:(void (^)(NSArray *record))complete {

    [self fetchDataByUserId:self.userID completionHandler:^(NSArray *record) {
        complete(record);
    }];

}

此外,关于错误消息:“不兼容的块指针类型”,您应该在google上搜索“如何在objective-c中使用块”,例如:

因为您的
completionHanler
不是
返回类型块
,所以它是
void

(作废(^)(NSArray*记录))
不同于
(NSArray*(^)(NSArray*记录))

谢谢您的解释,非常详细。但是我应该怎么做才能有一个从这个获取中接收数据的方法呢。一些类型,如:-(NSArray*)userDataLoaded;仅当fetchData方法可以返回NSArray而不是Block时。例如:NSArray*record=[self-fetchDataByUserId];返回记录;谢谢你的解释,非常详细。但是我应该怎么做才能有一个从这个获取中接收数据的方法呢。一些类型,如:-(NSArray*)userDataLoaded;仅当fetchData方法可以返回NSArray而不是Block时。例如:NSArray*record=[self-fetchDataByUserId];返回记录;谢谢你的解释,非常详细。但是我应该怎么做才能有一个从这个获取中接收数据的方法呢。一些类型,如:-(NSArray*)userDataLoaded;仅当fetchData方法可以返回NSArray而不是Block时。例如:NSArray*record=[self-fetchDataByUserId];返回记录;谢谢你的解释,非常详细。但是我应该怎么做才能有一个从这个获取中接收数据的方法呢。一些类型,如:-(NSArray*)userDataLoaded;仅当fetchData方法可以返回NSArray而不是Block时。例如:NSArray*record=[self-fetchDataByUserId];返回记录;非常感谢你,事实上,我对你的回答更了解布洛克。每当我有你