0

知道为什么回调没有执行吗?panoServie被初始化和一切。我把 NSLog 消息放在那里,没有任何反应。

- (CLLocationCoordinate2D) randomLatitudeLongitude
{
    CountryBBVal auBB = [[GGData SharedInstance] boundingBoxForCountry:Australia];
    //NSLog(@"BB: %f, %f, %f, %f", auBB.NELat, auBB.NELng, auBB.SWLat, auBB.SWLng);
    double ranLongitude = [self randomDoubleBetween: auBB.NELng and: auBB.SWLng]; // Boundix Box
    double ranLatitude = [self randomDoubleBetween: auBB.NELat and: auBB.SWLat];
    CLLocationCoordinate2D ranLatLng = CLLocationCoordinate2DMake(ranLatitude, ranLongitude);
    //NSLog(@"ranLatLng: [%f] [%f]", ranLatitude, ranLongitude);

    __block GMSPanorama *panPhoto = nil;
    [self.panoService requestPanoramaNearCoordinate:ranLatLng callback:^(GMSPanorama *panorama, NSError *error) {
            NSLog(@"panorama: %@ error: %@", panorama, error);

            panPhoto = panorama;
    }];

    if (!panPhoto) return [self randomLatitudeLongitude];


    return ranLatLng;
}
4

1 回答 1

1
  1. - requestPanoramaNearCoordinate:callback:是异步请求。它已启动并且代码执行没有被阻止。因此,if (!panPhoto) return [self randomLatitudeLongitude];立即调用panPhoto最有可能是静止nil的,因此return执行该语句。

  2. 整体方法的想法对我来说似乎不正确。

    • 您不应该在类似 getter 的方法中调用异步块(它应该立即返回结果)。如果你真的想要这样的方法,你应该为在回调中调用的这个方法定义你自己的回调块requestPanoramaNearCoordinate
    • 在方法中调用return [self randomLatitudeLongitude]自身也不是一个好主意。它可能导致无限递归。至少应该有一些最大递归调用阈值
于 2013-08-13T09:25:14.900 回答