我在学阻止语法但出了点问题。
第一个代码如下:
CLLocationCoordinate2D centerCoordinate = [Location sharedManager].coordinate;
MKCoordinateSpan span = MKCoordinateSpanMake(0.01, 0.01);
MKCoordinateRegion coordinateRegion = MKCoordinateRegionMake(centerCoordinate, span);
[self.mapView setRegion:coordinateRegion animated:YES];下面的代码(我的第一次尝试)奏效了:
MKCoordinateRegion (^aRegion)() = ^(void)
{
CLLocationCoordinate2D centerCoordinate = [Location sharedManager].coordinate;
MKCoordinateSpan span = MKCoordinateSpanMake(0.01, 0.01);
return MKCoordinateRegionMake(centerCoordinate, span);
};
[self.mapView setRegion:aRegion() animated:YES];但是下面的代码(我的第二次尝试)不起作用:
[self.mapView setRegion:(MKCoordinateRegion^(void)){
CLLocationCoordinate2D centerCoordinate = [Location sharedManager].coordinate;
MKCoordinateSpan span = MKCoordinateSpanMake(0.01, 0.01);
return MKCoordinateRegionMake(centerCoordinate, span);
}];错误消息如下:
1. Block pointer to non-function type is invalid.
2. Unexpected type name 'CLLocationCoordinate2D': expected expression

我该如何处理这段代码?谢谢你的好意。
发布于 2014-04-08 05:21:52
在您的示例中,该方法向块提供主体。因此,返回的值(MKCoordinateRegionMake)将返回给不存在的块的调用方。(setRegion:不是这里的调用者)。
相反,你可以这样做:
MKCoordinateRegion (^aRegion)() = ^(void)
{
CLLocationCoordinate2D centerCoordinate = [Location sharedManager].coordinate;
MKCoordinateSpan span = MKCoordinateSpanMake(0.01, 0.01);
return MKCoordinateRegionMake(centerCoordinate, span);
};
[self.mapView setRegion:aRegion() animated:YES];此外,如果您仍然想要块式的执行,可以尝试以下操作:
[self.mapView setRegion:({
CLLocationCoordinate2D centerCoordinate = [Location sharedManager].coordinate;
MKCoordinateSpan span = MKCoordinateSpanMake(0.01, 0.01);
MKCoordinateRegion region= MKCoordinateRegionMake(centerCoordinate, span);
region;
})];第二个不是块,而是语法。
发布于 2014-04-08 05:22:16
让我们从这些好的评论中得出一个答案:
在我看来,这就像实际执行该块的代码一样,该块的返回结果是传递给setRegion的参数:第二次尝试将块本身作为参数传递给setRegion:,该参数当然期望一个MKCoordinateRegion作为它的参数,而不是一个块。
而且(归功于MartinR),您可以使用额外的括号强制对块进行计算:
编辑,我最终会做好这件事的
[self.mapView setRegion:^MKCoordinateRegion(void){
CLLocationCoordinate2D centerCoordinate = [Location sharedManager].coordinate;
MKCoordinateSpan span = MKCoordinateSpanMake(0.01, 0.01);
return MKCoordinateRegionMake(centerCoordinate, span);
}()];https://stackoverflow.com/questions/22927826
复制相似问题