知道为什么回调没有执行? 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;
}
答案 0 :(得分:1)
- requestPanoramaNearCoordinate:callback:
是异步请求。它启动并且代码执行没有被阻止。因此if (!panPhoto) return [self randomLatitudeLongitude];
会立即调用,panPhoto
最可能仍为nil
,因此会执行return
语句。
整体方法的想法对我来说似乎不对。
requestPanoramaNearCoordinate
回调中调用的这个方法定义你自己的回调块。return [self randomLatitudeLongitude]
本身也不是一个好主意。它可以导致无限递归。至少应该有一些最大递归调用阈值