gpt4 book ai didi

iphone - 如何将信息从 appDelegate 传递到 UINavigationcontroller 中的 View Controller 之一

转载 作者:行者123 更新时间:2023-12-03 20:50:18 38 4
gpt4 key购买 nike

在我正在开发的 iPhone 应用程序中,我使用自定义类来管理与主机的网络通信。名为protocolClass 的类是appDelegate 中的ivar 和applicationDidFinishLaunching: 方法中的alloc + init。

现在,每当protocolClass从主机接收数据时,它都会在其委托(delegate)中调用protocolClassDidReceiveData:方法(我将其设置为appDelegate)。然后我需要更新 UINavigatorController 中的 customViewController 之一中的数据。

我是否应该在 appDelegate 中添加对需要更新的 customViewController 的引用?或者还有其他更有效的方法吗?

如果我保留对 customViewcontroller 的引用,内存使用会产生什么影响?

提前致谢。

最佳答案

如果我没理解错的话,您希望在程序的某个不相关部分发生事件后更新 View 。

为了减少代码中的依赖项数量,我建议使用 NSNotification 而不是更紧密耦合的实例变量。通知是 Cocoa 的一个概念,它允许代码的一部分发出类似事件的消息,任意数量的监听器都可以注册该消息。

在您的情况下,它看起来像这样:

AppDelegate header :

extern NSString* kDataReceived;

AppDelegate 实现:

NSString* kDataReceived = @"DataReceived";

- (void)protocolClassDidReceiveData:(NSData*)data {
[[NSNotificationCenter defaultCenter] postNotificationName:kDataReceived
object:self
userInfo:data];
}

在一些感兴趣的监听器类的实现中(例如你的 UIViewController):

// register for the notification somewhere
- (id)init
{
self = [super init];
if (self != nil) {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(dataReceivedNotification:)
name:kDataReceived
object:nil];
}
}

// unregister
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}

// receive the notification
- (void)dataReceivedNotification:(NSNotification*)notification
{
NSData* data = [notification userInfo];
// do something with data
}

关于iphone - 如何将信息从 appDelegate 传递到 UINavigationcontroller 中的 View Controller 之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/943929/

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