2016-04-27 60 views
0

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

我的头等舱

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

我打电话hideButton的方法在我的viewWillAppear中的功能。

我的第二类

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

编辑:

现在,如果我加载酥料饼和NSNotification被炒鱿鱼的按钮被启用,但问题是,如果我关闭和打开酥料饼,我的删除按钮仍然被禁用。

我酥料饼类

- (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]; 
} 
+0

你的问题还不清楚。你在哪里观察'BOOL'值?这两个类的两个方法是如何连接的? – rmaddy

+0

你需要比“不要得到真正的价值”更清楚。我猜你可能会在英文标题中使用“观察”一词,而读者则认为这是“关键价值观察”(KVO)中的技术含义。编辑您的问题以提供更多细节,并且有人可能会帮助您。 – CRD

+0

你的代码中的逻辑是曲折的。请明白'if(thing)'then'else'已经意味着'!thing',并且不需要'else if(!thing)'。 – trojanfoe

回答

0

你不能直接观察的价值。

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

+1

不是说这是个好主意,但是KVO可以在第二个VC – Wain

+0

的'finished'上使用,以及这个为我工作。但是,每当我关闭我的视图并重新加载它时,删除按钮将不会启用。因为该方法不会再次被触发。 – Korken55

+0

是啊......在这种情况下,您必须在创建按钮时检查值..只有当对象已经存在时,通知才会生效 – Bastian

-1

我解决了NSUserDefaults的这个问题。所以我可以设置布尔如果someAction正在发生。而在其他班级,我可以阅读布尔。 所以在我的第二类:

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

在我酥料饼类我说

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

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

可怕的想法。这不是'NSUserDefaults'的设计目的。 – trojanfoe

+0

以及我没有找到任何其他解决方案,为我工作。 – Korken55