作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当 appDelegate 收到应用程序将进入后台的消息时,我试图告诉作为 viewcontroller 属性的 CLLocationManager 对象停止更新位置,而我的问题是我不确定如何引用我的 appDelegate 类中的 viewController 对象。
最佳答案
听起来您采用了错误的方法。由于位置管理器是 View Controller 上的一个实例变量,它应该是指示它停止的 View Controller - 而不是应用程序委托(delegate)。
这就是 Cocoa/UIKit/Objective-C 的设计工作方式,其他任何事情都是一场艰苦的战斗。
也许在你的 viewController 中是这样的:
@implementation MyViewController
- (id)init
{
...
self.locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
[self.locationManager startUpdatingLocation];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillEnterForeground:) name:UIApplicationWillEnterForegroundNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:nil];
...
}
- (void)dealloc
{
[self.locationManager stopUpdatingLocation];
[[NSNotificationCenter defaultCenter] removeObserver:self];
...
}
- (void)applicationWillEnterForeground:(NSNotification *)notif
{
[self.locationManager startUpdatingLocation];
}
- (void)applicationDidEnterBackground:(NSNotification *)notif
{
[self.locationManager stopUpdatingLocation];
}
@end
但要回答您的具体问题,您可以从 View Controller 内部使用它来访问应用程序委托(delegate):
[UIApplication sharedApplication].delegate
这会让你告诉它有关 View Controller 的信息。但要小心,因为这样做可能会造成内存泄漏!
您需要确保委托(delegate)不会保留您的 View Controller ,否则它永远不会被释放。并且您需要确保在 View Controller 被释放时委托(delegate)对 View Controller 的引用设置为 nil。
一般来说,您应该避免让应用代理知道任何关于任何特定 View Controller 的信息。
关于iphone - 如何在 appdelegate 中获取指向 viewcontroller 对象的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8672931/
我是一名优秀的程序员,十分优秀!