从appdelegate引用已经实例化的viewcontroller

时间:2014-02-17 04:28:15

标签: ios

我正在尝试关闭applicationDidEnterBackground中的位置服务,在我的故事板的另一个vc中发送我的Stop ...方法。我试过这个技术: Storyboard - refer to ViewController in AppDelegate但我的理解是,这会创建相应VC的新实例,而不是对当前实例的引用,我通过nslogging原始控制器的地址和AppDelegate中的引用来确认这一点。它们是不同的,因此该方法不会停止我的位置服务。我对vc实例的理解是否正确?

我看到区域示例代码(https://developer.apple.com/library/ios/samplecode/Regions/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010726)中使用的技术,简而言之:

@class RegionsViewController;
@property (nonatomic, retain) IBOutlet RegionsViewController *viewController;
...
@synthesize viewController;
self.window.rootViewController = self.viewController;
[viewController.locationManager stopUpdatingLocation];

但这会使用nib,所以我无法弄清楚如何转换该代码。它似乎依赖于最初从appdelegate实例化位置VC,因此唯一的实例来自appdelegate,而我的storyboard应用程序,如果我理解它,则隐式地实例化我的位置VC。使用Regions代码,从AppDelegate和RegionsViewController记录相应的地址会按预期显示匹配值,因此停止位置服务实例。那么有人能告诉我故事板相当于Regions技术吗?

由于

1 个答案:

答案 0 :(得分:1)

以下工作(在appdelegate中)。至少我看到相同的地址nslogged为AppDelegate中的最终控制器引用,并且直接在引用的vc中检索...并且位置服务箭头在转到后台时消失(在随机延迟之后,似乎是预期的行为)

我的vc结构是(root)Tabbar> Navcontroller> Nearby(我的位置控制器)。

UITabBarController *tabBarController =(UITabBarController *)self.window.rootViewController;

UINavigationController *navigationController = [tabBarController viewControllers][0];

Nearby *nearbyInstance = (Nearby *)[navigationController topViewController];
[nearbyInstance stopAllLocUpdateModes];

谢谢rdelmar,我想你给了我足够的时间来保持这条赛道。