如何从app delegate中调用控制器中的方法。例如,我的应用程序使用app delegate来监视用户的位置。确定位置后,我想在控制器上调用一个方法,该控制器上有一个MKMapView并显示用户的位置。我怎么能这样做?
这是我目前的代码:
// AppDelegate.m
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
[[[DashboardViewController alloc] initWithNibName:@"DashboardViewController" bundle:nil] displayMyLocation:newLocation.coordinate];
}
还试过这个,它与SIGABRT
崩溃,但至少试图调用该方法:
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
[(DashboardViewController *)dashboardViewController displayMyLocation:manager];
}
或者,现在我考虑一下,让控制器监视用户的位置并自己调用它的方法是不是错了?如果我记得正确拥有多个CLLocationManagerDelegate委托并不影响性能,因为它们都以相同的方式访问GPS?这是对还是错?拥有同样事物的多个实例似乎有点蠢......
提前致谢!
@nevan更新
地图代码:
- (void)displayMyLocation:(CLLocation *)location {
MKCoordinateSpan span;
MKCoordinateRegion region;
span.latitudeDelta = 0.02;
span.longitudeDelta = 0.02;
region.center = location.coordinate;
region.span = span;
[map setRegion:region];
}
答案 0 :(得分:2)
让控制器监控位置事件肯定是个好主意。
一个相当不错的选择是使用通知中心通知控制器新的位置可用。我实际上在我的一个应用程序中做到了这一点。 Check out line 70 of this file to see how to send a notification和line 54 of this file to see how tp subscribe tp these notifications。
答案 1 :(得分:1)
locationManager:didUpdateToLocation
,每次设备在该位置获得新的修复,因此您最终会多次分配和启动DashboardViewController。执行此操作的正确方法是在设置应用程序委托时分配和初始化dashboardViewController实例变量,然后使用该实例变量。看起来你已经在第二段代码中完成了这项工作,但我不明白为什么你必须将它转换为DashboardViewController。
将位置管理器放在与mapview相同的位置会更好。为什么不将locationManager:didUpdateToLocation
移到那里?