Objective C新手,一种方法可以改变UI个元素,其他方法不行

Objective C newbie, one method can change UI elements, others can not

提前感谢您的任何意见。我一直在尝试编写一个程序,将串行命令解释为标签中的文本更改。我可以使用附加到按钮的 Action 轻松更改标签文本,但出于某种原因,我尝试更改该按钮操作之外的标签文本的所有尝试都没有任何改变。

//  MasterViewController.m

//
//  Created by Daniel Payne on 2/28/15.
//  Copyright (c) 2015 Daniel Payne. All rights reserved.
//

#import "MasterViewController.h"

@interface MasterViewController ()

@property (strong) IBOutlet NSTextField *score;
@property (nonatomic, strong) ORSSerialPort *serialPort;
@property (nonatomic, strong) MasterViewController *masterView;
@end

static MasterViewController *serialPortHelper = nil;
void connectPort(void) {

    ORSSerialPort *serialPort = [ORSSerialPort serialPortWithPath:@"/dev/tty.usbmodem1411"];
    serialPortHelper = [[MasterViewController alloc] init];
    serialPortHelper.serialPort = serialPort;
    serialPort.delegate = serialPortHelper;
    serialPort.baudRate = @9600;
    NSLog(@"port open");
    [serialPort open];

}
int main(int argc, const char * argv[]) {
    connectPort();

    return NSApplicationMain(argc, argv);

}



@implementation MasterViewController
- (IBAction)pushButton:(id)sender {
            [self.score setStringValue:@"1"]; //works
}

- (void)viewDidLoad {

    [super viewDidLoad];

}



-(void)awakeFromNib
{

        NSLog(@"View controller instance with view: %@", self.view);



}



- (void)serialPort:(ORSSerialPort *)serialPort didReceiveData:(NSData *)data
{
    NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

    if ([string rangeOfString:@"g"].location == NSNotFound) {

        NSLog(@"no goal");
    } else {
        [self.score setStringValue:@"1"]; //does not work
        NSLog(@"GOOOOAL");

    }

}

- (void)serialPortWasRemovedFromSystem:(ORSSerialPort *)serialPort
{
    self.serialPort = nil;
}

- (void)serialPort:(ORSSerialPort *)serialPort didEncounterError:(NSError *)error
{
    NSLog(@"%s %@ %@", __PRETTY_FUNCTION__, serialPort, error);
}

- (void)serialPortWasOpened:(ORSSerialPort *)serialPort
{
    NSLog(@"Serial port %s was opened", [serialPort.name UTF8String]);

}




@end

正在侦听您的串行端口的 MasterViewController 实例与您在屏幕上看到的实例不同。

您创建了一个新的并将其分配给一个静态变量 - 这与您从连接了所有插座的笔尖加载的那个不同。

在两种方法中记录 self 以确认。