Question

I'm trying to change a label from the AppDelegate. I can change the label with an IBAction that runs a changeLabel in the implementation of the class that has the label, but if I try to run changeLabel from the AppDelegate it changes the value (I have an NSLog), but doesn't update label.

Here's the code:

#import <Foundation/Foundation.h>

@interface testLabelThingy : NSObject
@property (strong) IBOutlet NSTextField *daLabel;
- (id) init;
- (void)changeLabel;
- (IBAction)daButton:(id)sender;
@end

and:

#import "testLabelThingy.h"

@implementation testLabelThingy
@synthesize daLabel;
- (id) init{
    self.daLabel = [[NSTextField alloc] init];
    return self;
}
- (IBAction)daButton:(id)sender{
    [self changeLabel];
}
- (void)changeLabel{
    NSLog(@"Change Label Function. Current value is: %@", [self.daLabel stringValue]);
    if([[self.daLabel stringValue] isEqualToString:@"Bloog"]){
        [self.daLabel setStringValue:@"Blarg"];
    }else{
        [self.daLabel setStringValue:@"Bloog"];
    }
}
@end
Was it helpful?

Solution

For that you have to use NSNotificationCenter.

in Appdelegate use following code.

 [[NSNotificationCenter defaultCenter] postNotificationName:@"ChangeThelabel" object:nil];

use the below code in the init method of the implementation of the class that has the label.

  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(ChangelabelText:) name:@"ChangeThelabel" object:nil];

And in the same class use the following function.

- (void)ChangelabelText:(NSNotification *)notification
{
   // Change the text here.
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top