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
以确认。
提前感谢您的任何意见。我一直在尝试编写一个程序,将串行命令解释为标签中的文本更改。我可以使用附加到按钮的 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
以确认。