Obj-C:没有执行回调

时间:2013-08-13 09:09:35

标签: objective-c callback nslog

知道为什么回调没有执行? 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;
}

1 个答案:

答案 0 :(得分:1)

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

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

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