gpt4 book ai didi

ios - NSnotification 中心不工作 iOS

转载 作者:行者123 更新时间:2023-11-28 20:30:29 27 4
gpt4 key购买 nike


上周我问了这个问题:Refresh the entire iOS app@Jim 建议我使用通知中心。我无法弄清楚如何使用通知,我被告知要问另一个问题,我尝试了整整一周自己弄清楚,所以就这样吧。

我有一个包含多个 subview 的 View 。其中一个 subview 是一个搜索栏(不是 tableview,只是一个自定义文本框),用户可以在这里搜索新的人,整个应用程序将逐屏更新。

当用户点击搜索 subview 中的 GO 按钮时,我会调用服务器以获取所有数据。之后我发布此通知:

 [self makeServerCalls];

[[NSNotificationCenter defaultCenter] postNotificationName:@"New data" object:Nil];

现在在我的父 View Controller 的初始化中我有一个监听器

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(viewDidLoad) name:@"New data" object:nil];

我知道这很可能是错误的,所以任何人都可以向我解释如何在我的情况下正确使用通知吗?或者是否有更好的方法来做我想做的事情。

感谢您能给我的任何帮助。

最佳答案

当您发布通知时,它会导致所有注册观察者都收到通知。他们通过向他们发送一条消息来得到通知……由选择器识别的消息。如评论中所述,您应该使用viewDidLoad。考虑一下……

- (void)newDataNotification:(NSNotification *notification) {
// Do whatever you want to do when new data has arrived.
}

在一些早期代码中(viewDidLoad 是一个很好的候选者):

[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(newDataNotification:)
name:@"New data"
object:nil];

顺便说一句,这是一个糟糕的名字。那好吧。此注册说明您的 self 对象将被发送消息 newDataNotification: 以及一个 NSNotification 对象,每当以名称 发布通知时来自任何对象的“新数据”。如果您想限制您希望从哪个对象接收消息,请提供一个非零值。

现在,当您发送通知时,您可以像在代码中那样简单地执行此操作:

[[NSNotificationCenter defaultCenter] postNotificationName:@"New data" object:nil];

这将确保(出于实际目的)调用 [self newDataNotification:notification]。现在,您也可以随通知一起发送数据。因此,假设新数据由 newDataObject 表示。由于您接受来自任何对象的通知,您可以:

[[NSNotificationCenter defaultCenter]
postNotificationName:@"New data"
object:newDataObject];

然后在您的处理程序中:

- (void)newDataNotification:(NSNotification *notification) {
// Do whatever you want to do when new data has arrived.
// The new data is stored in the notification object
NewData *newDataObject = notification.object;
}

或者,您可以传递用户信息字典中的数据。

[[NSNotificationCenter defaultCenter]
postNotificationName:@"New data"
object:nil
userInfo:@{
someKey : someData,
anotherKey : moreData,
}];

然后,您的处理程序将如下所示...

- (void)newDataNotification:(NSNotification *notification) {
// Do whatever you want to do when new data has arrived.
// The new data is stored in the notification user info
NSDictionary *newData = notification.userInfo;
}

当然,您可以使用我更喜欢的 block API 执行相同的操作。

无论如何,请注意,您必须移除您的观察者。如果你有一个 viewDidUnload 你应该把它放在那里。此外,确保它也进入 dealloc:

- (void)dealloc {
// This will remove this object from all notifications
[[NSNotificationCenter defaultCenter] removeObserver:self];
}

关于ios - NSnotification 中心不工作 iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12325673/

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