2016-04-27 8 views
0

Ich möchte meine Schaltfläche in meiner Popover-Klasse ausblenden, wenn mein Bool-Wert in der anderen Klasse falsch ist, aber das Problem ist, ich bekomme nicht den "TRUE" -Wert.Überprüfen, ob Bool Wert geändert

My First Class

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

nenne ich die Methode der hideButton in meiner ViewWillAppear Funktion.

Meine zweite Klasse

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

EDIT:

Nun, wenn ich die Popover laden und die NSNotification wird ausgelöst, die Taste aktiviert ist, aber das Problem ist, wenn ich die popover schließen und öffnen, Mein Löschen-Button ist immer noch deaktiviert.

Meine popover Klasse

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

Meine zweite Klasse

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

Ihre Frage unklar ist. Wo beobachtest du einen BOOL-Wert? Wie sind die beiden Methoden aus diesen beiden Klassen miteinander verbunden? – rmaddy

+0

Sie müssen klarer sein als "erhalten Sie nicht den wahren Wert". Ich schätze, Sie könnten das Wort "Observing" im englischen Sinne des Titels verwenden, während Leser davon ausgehen, dass Sie es in "Key Value Observing" (KVO) meinen. Bearbeiten Sie Ihre Frage, um mehr Details zu erhalten und jemand könnte Ihnen helfen. – CRD

+0

Die Logik in Ihrem Code ist qualvoll. Bitte verstehe, dass 'if (ding)' then 'else' schon' 'thing' 'bedeutet und es nicht nötig ist,' else if (! Ding)' zu setzen. – trojanfoe

Antwort

0

Sie den Wert nicht direkt beobachten können.

können Sie eine senden, wenn die Aktion beginnt/endet und beobachten Sie in Ihrer ersten Klasse, um die Schaltfläche anzuzeigen/auszublenden.

+1

nicht zu sagen, es ist eine gute Idee, aber KVO könnte mit 'fertig 'auf der zweiten VC – Wain

+0

gut verwendet werden, dieser eine arbeitete für mich. Aber wenn ich meine Ansicht schließe und sie erneut lade, wird die Schaltfläche zum Löschen nicht aktiviert. Weil die Methode nicht erneut ausgelöst wird. – Korken55

+0

yeah ... in diesem Fall müssen Sie den Wert überprüfen, wenn Sie die Schaltfläche erstellen .. die Benachrichtigung funktioniert nur, wenn das Objekt bereits vorhanden ist – Bastian

-1

Ich löste dieses Problem mit den NSUserDefaults. also kann ich das bool einstellen, wenn someAction passiert. Und in jeder anderen Klasse kann ich den Bool lesen. so in meiner zweiten Klasse:

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

In My Popover Klasse sagen, dass ich

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

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

Schreckliche Idee. Dafür wurde NSUserDefaults nicht entwickelt. – trojanfoe

+0

Nun, ich habe keine andere Lösung gefunden, die für mich funktioniert hat. – Korken55