2016-04-27 12 views
0

他のクラスのブール値がfalseのときにPopoverクラスで自分のボタンを非表示にしたいが、問題は "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; 
} 

EDIT:今

、私はポップオーバーをロードし、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'値をどこで観察していますか?これら2つのクラスの2つのメソッドはどのようにして接続されていますか? – rmaddy

+0

"真の価値を得ない"よりも明確にする必要があります。私はあなたが "Key value observing"(KVO)の技術的意味を意味していると仮定している間に、英語の意味でタイトルに "Observing"という言葉を使用しているかもしれないと推測しています。あなたの質問を編集して詳細を提供すれば、誰かがあなたを助けることができるかもしれません。 – CRD

+0

あなたのコードのロジックは厄介です。 'もし(物)'、そして 'else'は既に'!thing'を意味し、 'else if(!thing)'を入れる必要はないことを理解してください。 – trojanfoe

答えて

0

あなたは値を直接観察することはできません。

アクションが開始/終了したら、NSNotificationを送信し、ボタンを表示/非表示にするためにファーストクラスでそれを観察することができます。

+1

それは良いアイデアだと言っているわけではありませんが、KVOは2番目のVC – Wain

+0

の 'finished'と一緒に使えます。しかし、私は私のビューを閉じて再度それを再読み込みボタンを削除することはできません。このメソッドは再度起動しないためです。 – Korken55

+0

ええと...その場合は、ボタンを作成するときに値をチェックする必要があります。通知は、オブジェクトが既に存在する場合にのみ機能します – Bastian

-1

この問題をNSUserDefaultsで解決しました。 someActionが起こっている場合、私はboolを設定できます。そして、他のどのクラスでも、私はブールを読むことができます。ので、私の第二のクラスで :

-(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

関連する問題