gpt4 book ai didi

ios - IBAction 未被调用,但 UI 正在更新?

转载 作者:行者123 更新时间:2023-11-29 03:15:58 26 4
gpt4 key购买 nike

所以问题是我没有编写代码,只是试图编辑一些代码。它是与某个电气I/O板相关的代码,该板是由各种iOS设备运行的工厂系统的输入/输出控制板。

我似乎不太明白以前的编码员在这个类中做了什么:

    //

// AnalogVC.m
//



#import "AnalogVC.h"

#import "AppDelegate.h"



@interface InputItem : NSObject

@property (weak,nonatomic) UISwitch *onSwitch;

@property (weak,nonatomic) UIProgressView *progressView;

@property (weak,nonatomic) UILabel *valueLabel;

@end



@implementation InputItem

AppDelegate *appDelegate;

+ (id)itemWithSwitch:(id)temp progress:(id)progress label:(id)label

{


InputItem *item = [[InputItem alloc] init];

item.onSwitch = temp;

item.progressView = progress;

item.valueLabel = label;

return item;

}



- (void)setDisconnected

{


self.onSwitch.on = NO;

self.onSwitch.enabled = NO;

self.valueLabel.text = @"0.000 v";

self.progressView.progress = 0;



}



- (void)setOn

{



self.onSwitch.on = YES;

self.onSwitch.enabled = YES;

self.valueLabel.text = @"0.000 v";

self.progressView.progress = 0;

[appDelegate watchPins:@"testing ON"];

}



- (void)setOff

{


self.onSwitch.on = NO;

self.onSwitch.enabled = YES;

self.valueLabel.text = @"0.000 v";

self.progressView.progress = 0;

[appDelegate watchPins:@"testing OFF"];

}



- (void)setValue:(double)value

{

if (self.onSwitch.on)

{

self.valueLabel.text = [NSString stringWithFormat:@"%0.3f v",value];

self.progressView.progress = value/5.0;

if(value > 0.8){

[appDelegate watchPins:@"testing VALUE"];

}

}

}

@end



@interface AnalogVC ()

{


NSArray *_inputItems;

AppDelegate *appDelegate;

NSMutableArray *channel0Values;



UIColor *custom1;

UIColor *custom2;

UIColor *custom3;

UIColor *custom4;

}



@property (nonatomic) NCBoardManager *manager;



@property (weak,nonatomic) IBOutlet UISwitch *inputSwitch0;

@property (weak,nonatomic) IBOutlet UISwitch *inputSwitch1;

@property (weak,nonatomic) IBOutlet UISwitch *inputSwitch2;

@property (weak,nonatomic) IBOutlet UISwitch *inputSwitch3;

@property (weak,nonatomic) IBOutlet UISwitch *inputSwitch4;

@property (weak,nonatomic) IBOutlet UISwitch *inputSwitch5;



@property (weak,nonatomic) IBOutlet UIProgressView *inputProgress0;

@property (weak,nonatomic) IBOutlet UIProgressView *inputProgress1;

@property (weak,nonatomic) IBOutlet UIProgressView *inputProgress2;

@property (weak,nonatomic) IBOutlet UIProgressView *inputProgress3;

@property (weak,nonatomic) IBOutlet UIProgressView *inputProgress4;

@property (weak,nonatomic) IBOutlet UIProgressView *inputProgress5;



@property (weak,nonatomic) IBOutlet UILabel *inputValue0;

@property (weak,nonatomic) IBOutlet UILabel *inputValue1;

@property (weak,nonatomic) IBOutlet UILabel *inputValue2;

@property (weak,nonatomic) IBOutlet UILabel *inputValue3;

@property (weak,nonatomic) IBOutlet UILabel *inputValue4;

@property (weak,nonatomic) IBOutlet UILabel *inputValue5;



@property (weak,nonatomic) IBOutlet UISlider *outputSlider0;

@property (weak,nonatomic) IBOutlet UISlider *outputSlider1;



@property (weak,nonatomic) IBOutlet UIStepper *outputStepper0;

@property (weak,nonatomic) IBOutlet UIStepper *outputStepper1;



@property (weak,nonatomic) IBOutlet UILabel *outputValue0;

@property (weak,nonatomic) IBOutlet UILabel *outputValue1;





- (IBAction)inputChannelChanged:(UISwitch *)sender;

- (IBAction)outputSliderMoved:(UISlider *)sender;

- (IBAction)outputSliderStopped:(UISlider *)sender;

- (IBAction)outputStepperChanged:(UIStepper *)sender;

@end



@implementation AnalogVC{}





//////////////////////////////

#pragma mark View Lifecycle

//////////////////////////////





- (void)viewDidLoad

{

[super viewDidLoad];

NSLog(@"Analog VC loaded");

_inputItems = @[[InputItem itemWithSwitch:_inputSwitch0 progress:_inputProgress0 label:_inputValue0],

[InputItem itemWithSwitch:_inputSwitch1 progress:_inputProgress1 label:_inputValue1],

[InputItem itemWithSwitch:_inputSwitch2 progress:_inputProgress2 label:_inputValue2],

[InputItem itemWithSwitch:_inputSwitch3 progress:_inputProgress3 label:_inputValue3],

[InputItem itemWithSwitch:_inputSwitch4 progress:_inputProgress4 label:_inputValue4],

[InputItem itemWithSwitch:_inputSwitch5 progress:_inputProgress5 label:_inputValue5]];



_manager = [NCBoardManager sharedBoardManager];



__unsafe_unretained AnalogVC *vc = self;

[_manager setAnalogInputHandling:dispatch_get_main_queue()

filter:^(NCAnalogInputs *inputs){ return YES; }

handler:^(NCAnalogInputs *inputs){ [vc setAnalogInputs:inputs]; }];





// Register for notifications

[[NSNotificationCenter defaultCenter] addObserver:self

selector:@selector(boardConnected:)

name:CONNECTED_NOTIFICATION

object:nil];



[[NSNotificationCenter defaultCenter] addObserver:self

selector:@selector(boardDisconnected:)

name:DISCONNECTED_NOTIFICATION

object:nil];

}



- (void)viewWillAppear:(BOOL)animated

{

[super viewWillAppear:animated];

[self updateAnalogInputs];

[self updateAnalogOutputs];



custom1 = [UIColor whiteColor];

custom2 = [UIColor darkGrayColor];

custom3 = [UIColor blackColor];

custom4 = [UIColor colorWithRed:.97 green:.97 blue:.588 alpha:1.0];



CAGradientLayer *gradient = [CAGradientLayer layer];

gradient.frame = self.view.bounds;

gradient.colors = [NSArray arrayWithObjects:(id)[custom2 CGColor], (id)[custom1 CGColor], (id)[custom2 CGColor], nil];

gradient.startPoint = CGPointMake(0.5, 0);

gradient.endPoint = CGPointMake(0.5, 1.0);

gradient.locations = [NSArray arrayWithObjects: [NSNumber numberWithFloat:0.0], [NSNumber numberWithFloat:0.5], [NSNumber numberWithFloat:1.0], nil];

[self.view.layer insertSublayer:gradient atIndex:0];



[self.inputSwitch0 setOnTintColor:custom4];

[self.inputSwitch1 setOnTintColor:custom4];

[self.inputSwitch2 setOnTintColor:custom4];

[self.inputSwitch3 setOnTintColor:custom4];

[self.inputSwitch4 setOnTintColor:custom4];

[self.inputSwitch5 setOnTintColor:custom4];



[self.inputSwitch0 setTintColor:custom3];

[self.inputSwitch1 setTintColor:custom3];

[self.inputSwitch2 setTintColor:custom3];

[self.inputSwitch3 setTintColor:custom3];

[self.inputSwitch4 setTintColor:custom3];

[self.inputSwitch5 setTintColor:custom3];



self.inputProgress0.trackTintColor = custom3;

self.inputProgress1.trackTintColor = custom3;

self.inputProgress2.trackTintColor = custom3;

self.inputProgress3.trackTintColor = custom3;

self.inputProgress4.trackTintColor = custom3;

self.inputProgress5.trackTintColor = custom3;



self.inputProgress0.progressTintColor = custom4;

self.inputProgress1.progressTintColor = custom4;

self.inputProgress2.progressTintColor = custom4;

self.inputProgress3.progressTintColor = custom4;

self.inputProgress4.progressTintColor = custom4;

self.inputProgress5.progressTintColor = custom4;



self.outputSlider0.minimumTrackTintColor = custom4;

self.outputSlider1.minimumTrackTintColor = custom4;

self.outputSlider0.maximumTrackTintColor = custom3;

self.outputSlider1.maximumTrackTintColor = custom3;



self.outputSlider0.thumbTintColor = custom3;

self.outputSlider1.thumbTintColor = custom3;



if(_manager.isBoardConnected)

{

self.outputStepper0.tintColor = custom4;

self.outputStepper1.tintColor = custom4;

self.outputStepper0.enabled = TRUE;

self.outputStepper1.enabled = TRUE;

self.outputSlider0.enabled = TRUE;

self.outputSlider1.enabled = TRUE;

}

else

{

self.outputStepper0.tintColor = custom2;

self.outputStepper1.tintColor = custom2;

self.outputStepper0.enabled = FALSE;

self.outputStepper1.enabled = FALSE;

self.outputSlider0.enabled = FALSE;

self.outputSlider1.enabled = FALSE;

}

}





//////////////////////////////

#pragma mark Rotation Calls

//////////////////////////////





- (NSUInteger)supportedInterfaceOrientations

{

return UIInterfaceOrientationPortrait;

}



- (BOOL)shouldAutorotate

{

return FALSE;

}





//////////////////////////

#pragma mark Board Calls

//////////////////////////





- (void)boardConnected:(NSNotification *)notification

{

[self updateAnalogInputs];

[self updateAnalogOutputs];



self.outputStepper0.enabled = TRUE;

self.outputStepper1.enabled = TRUE;

self.outputSlider0.enabled = TRUE;

self.outputSlider1.enabled = TRUE;



self.outputStepper0.tintColor = custom4;

self.outputStepper1.tintColor = custom4;

}



- (void)boardDisconnected:(NSNotification *)notification

{

[self updateAnalogInputs];

[self updateAnalogOutputs];



self.outputStepper0.enabled = FALSE;

self.outputStepper1.enabled = FALSE;

self.outputSlider0.enabled = FALSE;

self.outputSlider1.enabled = FALSE;



self.outputStepper0.tintColor = custom2;

self.outputStepper1.tintColor = custom2;

}



- (void)updateAnalogInputs

{


uint8_t channel = self.manager.analogInputChannels;

switch (self.manager.analogInputStatus)

{

case NCInputConnected:

// Check if channels we left on

if (channel) self.manager.analogInputChannels = 0;

[_inputItems makeObjectsPerformSelector:@selector(setOff)];

break;

case NCInputDisconnected:

[_inputItems makeObjectsPerformSelector:@selector(setDisconnected)];

break;

case NCInputLiveUpdating:

for (InputItem *item in _inputItems)

{

//if (channel & 1) [item setOn];

//else [item setOff];

channel >>= 1;

}

break;

case NCInputSampling:

[_inputItems makeObjectsPerformSelector:@selector(setDisconnected)];

break;

case NCInputTransfering:

[_inputItems makeObjectsPerformSelector:@selector(setDisconnected)];

break;

}



}





- (void)setAnalogInputs:(NCAnalogInputs *)inputs

{


int i = 0;

uint8_t channels = inputs.channels;

for (InputItem *item in _inputItems)

{

if (channels & 1)

{

[item setValue:[inputs valueForChannel:i]];


}

channels >>= 1;

i++;

}

}



- (void)updateAnalogOutputs

{

BOOL connected = [self.manager isBoardConnected];



self.outputSlider0.value = self.manager.analogOutput0;

self.outputSlider0.enabled = connected;

self.outputStepper0.value = self.outputSlider0.value * 1000;

self.outputStepper0.enabled = connected;

self.outputValue0.text = [NSString stringWithFormat:@"%0.3f v",self.outputSlider0.value];



self.outputSlider1.value = self.manager.analogOutput1;

self.outputSlider1.enabled = connected;

self.outputStepper1.value = self.outputSlider1.value * 1000;

self.outputStepper1.enabled = connected;

self.outputValue1.text = [NSString stringWithFormat:@"%0.3f v",self.outputSlider1.value];

}





///////////////////////////////

#pragma mark IBAction Methods

///////////////////////////////



- (IBAction)inputChannelChanged:(UISwitch *)sender

{

NSLog(@"TEST");

InputItem *item = [_inputItems objectAtIndex:sender.tag];

uint8_t channels = self.manager.analogInputChannels;

if (sender.on)

{

channels |= (1 << sender.tag);

[item setOn];



}

else

{

channels &= ~(1 << sender.tag);

[item setOff];

}

if (!self.manager.analogInputChannels) [self.manager startAnalogLiveUpdating];

else if(!channels) [self.manager stopAnalogLiveUpdating];



self.manager.analogInputChannels = channels;

}



- (IBAction)outputSliderMoved:(UISlider *)sender

{

if (!sender.tag)

{

self.manager.analogOutput0 = sender.value;

self.outputValue0.text = [NSString stringWithFormat:@"%0.3f v",sender.value];

}

else

{

self.manager.analogOutput1 = sender.value;

self.outputValue1.text = [NSString stringWithFormat:@"%0.3f v",sender.value];

}

}



- (IBAction)outputSliderStopped:(UISlider *)sender

{

if (!sender.tag)

{

self.manager.analogOutput0 = sender.value;

self.outputStepper0.value = round(sender.value * 1000.0);

self.outputValue0.text = [NSString stringWithFormat:@"%0.3f v",self.outputStepper0.value/1000.0];

}

else

{

self.manager.analogOutput1 = sender.value;

self.outputStepper1.value = round(sender.value * 1000.0);

self.outputValue1.text = [NSString stringWithFormat:@"%0.3f v",self.outputStepper1.value/1000.0];

}

}



- (IBAction)outputStepperChanged:(UIStepper *)sender

{

float value = sender.value/1000.0;



if (!sender.tag)

{

self.manager.analogOutput0 = value;

self.outputSlider0.value = value;

self.outputValue0.text = [NSString stringWithFormat:@"%0.3f v",value];

}

else

{

self.manager.analogOutput1 = sender.value/1000.0;

self.outputSlider1.value = value;

self.outputValue1.text = [NSString stringWithFormat:@"%0.3f v",value];

}

}



@end

我遇到的问题是我无法弄清楚如何从 Storyboard 上的 UIProgressViews 中获取值(正如您所说,这是一个微不足道的概念)。然而,这种设置相当复杂。

第二个问题是;我不确定是否有办法可以对此进行调试,因为应用程序仅在外部设备(nanospark Controller 板)连接到 iPod 时运行。

我遇到的最后一个但最后一个问题是,我假设正在调用 IBAction InputChannelChanged (无法像前面提到的那样使用断点定期调试它,因为它需要外部设备来运行应用程序),但是当我运行应用程序时它会做它应该做的一切,并且按钮会正确响应原始软件开发人员编写的代码。

这意味着,如果我将短信方法添加到 IBAction(通过添加 [appDelegate watchPins@"TEST"]),它不会将文本发送给用户,但按钮仍然会执行它们应该执行的一致操作符合以前开发人员的愿望......这意味着 IBAction 方法确实被调用......但是为什么我的文本没有通过?我知道 [appDelegate watchPins:@"TEST"];应该像我在他的其他几个类(class)中使用过的那样工作。

这是显示 AnalogVC.m 用户界面的屏幕截图:

http://i.stack.imgur.com/NNpZk.png

我并不觉得有义务回答所有这些问题,只是我觉得有必要提供所有三个问题,以便更好地了解问题的背景。感谢并抱歉 TL;DR。

我会上传图像,但我没有达到要求的最低声誉。

我试图添加另一个 IBAction 只是为了看看按钮是否对此有反应;即使我从其他 worker 类(Class)那里复制了确切的代码,仍然一无所获。

最佳答案

通常的规则是在 IB(界面生成器)中检查您的导出和操作。通常它是一个损坏的链接。

如果不是这样,您将需要找出一种调试方法。如果原始开发人员没有办法模拟专用硬件,他们是如何编写应用程序的?

SO 上的读者不可能知道是什么阻止了应用程序的正常运行。

一种选择是向您的 IBAction 方法添加日志语句,在现场运行开发构建程序,然后将 iPad 连接到 Xcode 并查看控制台日志以查看日志语句的输出。

顺便说一下,您发布了数百行代码,其中大部分是 Xcode 添加的样板代码,其余大部分与您试图解决的问题无关。减少您发布到相关部分的代码是个好主意,这样您的读者就可以将重点放在零上。否则,他们可能会失去耐心,滚动浏览大量不相关的代码以尝试找到与您的帖子相关的部分。

关于ios - IBAction 未被调用,但 UI 正在更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21711876/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com