gpt4 book ai didi

objective-c - 如何在没有协议(protocol)的情况下在 2 个 View Controller 之间传递值?

转载 作者:行者123 更新时间:2023-11-28 17:58:18 25 4
gpt4 key购买 nike

我有两个 View Controller ,称它们为 viewAViewB

  • 所有操作都发生在主视图 - ViewA
  • 按下菜单按钮,调出 ViewB,一切正常,菜单出现

现在,用户触摸一个 IBAction 按钮,以编程方式只需要:

  1. 改变BOOL的值,将其命名为myBOOLYES
  2. 关闭 ViewB
  3. myBOOL 变量的当前状态 YES 传回 ViewA

我已经在两个 View 上声明了相同的 BOOL,设置属性,但是根据我的 NSLogViewB 解散并加载回来时向上 ViewA,它恢复为 NO

所以我知道我要离题了,我只想知道您是否可以在两个 Controller 之间发送 BOOL 的值,如果可以,请给我举个例子。 . 因为搜索已经找到带有 NSString 的 Protocols 和 Delegate 示例,当我尝试使用 BOOL 时,我陷入了导入循环,但是我已经读到它有可能制作一个全局的 BOOL,虽然它的设计很糟糕,但我现在只需要克服这个障碍。

最佳答案

关于这个主题的问题应该更多地关注 NSNotificationCenter 而不是 NSUserDefaults,注意两者都是单例。

NSUserDefaults:

这个类的目的是不是在类之间传递变量。它的目的是存储用户的默认值。 (即首选项、设置等)。

NSNotificationCenter:

这个类非常方便,并且有许多不同的用途,其中之一是广播一个变量以供任何类接收。接收类称为观察者。这种模式被称为 Observer Pattern .

注意 NSUserDefaults 方法的优点是允许您在其他类初始化之前设置变量,并且可以随时检索。然而,这真的很草率(恕我直言)并且被认为是不好的做法。


NSNotificationCenter 上的 Quick and Dirty 代码示例:

// upon initializing the class that wants to observe the changes, we add it as an observer.
// So, somewhere in the A.m, upon being initialized (init, maybe?).

- (id)init {
if (self = [super init]) {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(calledUponNotif:)
name:@"MyObserveKey"
object:nil];
}
return self;
}

// the selector should look something like this:
- (void)calledUponNotif:(NSNotification *)notif {
id sentVar = [notif object];
}

// Somewhere in the B.m
[[NSNotificationCenter defaultCenter] postNotificationName:@"MyObserveKey"
object:varToSend];

另注:调用postNotification方法后,其他类中注册的选择器会同步调用,不用担心。

关于objective-c - 如何在没有协议(protocol)的情况下在 2 个 View Controller 之间传递值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11918682/

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