gpt4 book ai didi

iphone - 如何在 appdelegate 中获取指向 viewcontroller 对象的指针

转载 作者:行者123 更新时间:2023-11-28 23:09:20 25 4
gpt4 key购买 nike

当 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com