【问题标题】:Check if Bool Value Changed检查布尔值是否改变
【发布时间】:2016-08-22 01:44:30
【问题描述】:

我想在我的 Popover 类中隐藏我的按钮,只要我在另一个类中的 bool 值为 false,但问题是我没有得到“TRUE”值。

我的第一堂课

 -(void) hideButton{
        finished = _secondVC.finished;
        BOOL isRunning = !finished;
        if(isRunning){
        _deleteButton.hidden = YES;
        }else if(finished){
            _deleteButton.hidden = NO;
        }
    }

我在 ViewWillAppear 函数中调用了 hideButton 方法。

我的第二课

-(void) someAction{
  if(something){
  self.finished = YES;
}

编辑:

现在,如果我加载 Popover 并且 NSNotification 被触发,则按钮已启用,但问题是,如果我关闭并打开 popover,我的删除按钮仍处于禁用状态。

我的 PopOver 类

  - (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    if(syncFinished){
          _deleteButton.enabled = YES;
    }else if(!syncFinished){
        _deleteButton.enabled = NO;
    }
}

    - (void)viewDidLoad {
      [super viewDidLoad];
      [[NSNotificationCenter defaultCenter] addObserver:self
                                                     selector:@selector(showButton)
                                                         name:@"syncFinish"
                                                       object:nil];
     }

    - (void) showButton{
     syncFinished = YES;
      _deleteButton.enabled = YES;
     }

我的第二课

-(void) someAction{
  if(something){
  [[NSNotificationCenter defaultCenter] postNotificationName:@"syncFinish"
                                                        object:self];
}

【问题讨论】:

  • 您的问题不清楚。您在哪里观察到 BOOL 值?这两个类中的两个方法是如何连接的?
  • 你需要比“没有得到真正的价值”更清楚。我猜你可能在标题中使用了英文意义上的“Observing”这个词,而读者假设你的意思是它在“Key value Observing”(KVO)中的技术含义。编辑您的问题以提供更多详细信息,有人可能会为您提供帮助。
  • 你代码中的逻辑很折磨人。请理解if (thing) 然后else 已经表示!thing,无需输入else if (!thing)

标签: ios objective-c boolean observers


【解决方案1】:

我用 NSUserDefaults 解决了这个问题。所以如果 someAction 正在发生,我可以设置布尔值。在其他所有课程中,我都可以阅读布尔值。 所以在我的第二课:

 -(void) someAction{
       if(something){
         [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"syncFinish"];
        } else {
         [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"syncFinish"];
        }

在我的 Popover 类中我说

    - (void)viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];

        if(![[NSUserDefaults standardUserDefaults] boolForKey:@"syncFinish"]) {
            _deleteButton.enabled = NO;
        } else {
            _deleteButton.enabled = YES;
        }
    }

【讨论】:

  • 糟糕的想法。这不是 NSUserDefaults 的设计目的。
  • 好吧,我没有找到任何其他适合我的解决方案。
【解决方案2】:

你不能直接观察值。

您可以在操作开始/结束时发送NSNotification,并在您的第一堂课中观察以显示/隐藏按钮。

【讨论】:

  • 不是说这是个好主意,但 KVO 可以在第二个 VC 上与 finished 一起使用
  • 这个对我有用。但是每当我关闭我的视图并再次重新加载它时,删除按钮将不会被启用。因为该方法不会再次被触发。
  • 是的...在这种情况下,您必须在创建按钮时检查该值。只有当对象已经存在时,通知才会起作用
猜你喜欢
  • 2013-04-02
  • 1970-01-01
  • 2021-02-09
  • 1970-01-01
  • 2014-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-07
相关资源
最近更新 更多