2014-02-11 1 views
0

그래서 문제는 코드를 작성하지 않았으며 일부 코드를 편집하려고 시도한 것입니다. 이것은 특정 iOS 보드에 관련된 코드로 다양한 iOS 장치에서 실행되는 공장 시스템 용 입/출력 제어 보드입니다.IBAction이 호출되지 않지만 UI가 업데이트 중입니까?

나는 확실히 이전 코더이 클래스 내에서 무슨 짓을했는지 알아낼 수 없습니다

// 

// 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 

오전 데 문제가 I가와에있는 UIProgressViews에서 값을하는 방법을 알아낼 수 없습니다 스토리 보드 (이것은 당신이 말한 것처럼 사소한 개념입니다). 그러나이 설정을 사용하면 다소 복잡합니다.

두 번째 문제점은 다음과 같습니다. 외부 장치 (nanospark 컨트롤러 보드)가 iPod에 연결되어있을 때만 응용 프로그램으로 디버깅 할 수있는 방법이 있는지 잘 모르겠습니다. 이 실행됩니다.

내가 마지막으로하는 마지막 문제는 IBAction InputChannelChanged가 호출되고 있다고 가정합니다 (응용 프로그램을 실행하기 위해 외부 장치가 필요하기 때문에 앞에서 설명한 중단 점을 사용하여이 디버그를 정기적으로 디버깅 할 수는 없습니다). 그러나 실행할 때 응용 프로그램은 필요한 모든 작업을 수행하며 버튼은 원래 소프트웨어 개발자가 코딩 한 것과 정확하게 반응합니다.

즉, [appDelegate watchPins @ "TEST"]를 추가하여 IBAction에 문자 메시지 메서드를 추가하면 텍스트를 사용자에게 보내지 않지만 단추는 여전히 수행해야 할 작업을 수행한다는 것을 의미합니다 이전 개발자의 열망과 일치합니다 .... 이것은 IBAction 메서드가 실제로 호출되고 있음을 의미하지만 그 다음 내 텍스트가 통과되지 않는 이유는 무엇입니까? 나는 그것을 알고있다 [appDelegate watchPins : @ "TEST"]; 다른 여러 수업에서 내가 사용한대로 작동해야합니다. 여기

는 AnalogVC.m의 UI를 표시하는 스크린 샷입니다 :

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

생각하지 마세요 그냥 내가 필요한 더 큰 문맥 세 가지를 모두 제공에 느낀이 모든 질문에 대답 할 의무가 문제의 TL에 감사 드리며 죄송합니다. DR.

이미지를 업로드 하겠지만 필요한 최소 평판이 없습니다.

다른 IBAction을 추가하여 버튼이 그 것에 반응하는지 확인하려고했습니다. 다른 작업 클래스의 정확한 코드를 복사하더라도 여전히 아무것도 없습니다.

답변

1

일반적인 규칙은 IB (Interface Builder)에서 아웃렛 및 작업을 확인하는 것입니다. 종종 깨진 링크입니다.

이것이 아니라면, 이것을 디버깅 할 방법을 찾아야 할 것입니다. 원래 개발자는 전용 하드웨어를 시뮬레이션 할 방법이없는 경우 어떻게 앱을 작성 했습니까?

독자가 SO가 올바르게 작동하지 못하게하는 원인을 알아내는 것은 불가능합니다.

로그 옵션을 IBAction 메소드에 추가하고, 개발 프로그램을 실행하여 필드에서 프로그램을 작성한 다음 iPad를 Xcode에 연결하고 콘솔 로그를보고 로그 문의 출력을 봅니다.

덧붙여서, 여러분은 수백 줄의 코드를 게시했습니다. 코드의 대부분은 Xcode에 의해 추가 된 상용구 코드와 해결하려는 문제와 관련이없는 나머지 부분의 상당 부분을 게시했습니다. 관련 섹션에 게시하는 코드를 요약하여 독자가 중요한 정보를 얻을 수 있도록하는 것이 좋습니다. 그렇지 않으면 무의미한 코드를 쌓아서 게시물에 관련된 비트를 찾기 위해 인내심을 잃을 수 있습니다.

+0

나는 물리적으로 나와 함께 하드웨어를 가지고있다. 나는 코드를 간결하게하겠다. 나는 사과한다. 로그를 시험해보고 편집을 완료합니다. 너무 많은 것을 추가하는 것에 대한 나의 추론은 심지어 나는 그것을 정말로 이해할 수 없었던 수업을 통해 터벅 터벅 걷고 있으며, 수업 전체가 다른 누군가의 명확한 이해를 위해 필요할 것이라고 생각했습니다. – Tukajo

+0

음 ... Xcode에서 프로젝트가있는 사용자가 어떤 클래스가 문제와 관련이 있는지 알 수 없다면 붙여 넣은 읽기 코드가 원인을 알 수 없을 것입니다 문제의 –

+0

나는 문제에 관련되거나 그렇지 않은 것을 이해할 수 없다고 결코 말하지 않았다. 태도는 필요 없다. 우린 어른이야. 나는 그것이 약간의 코드라는 것을 알았지 만, 나는 추론을 통해 물건이 선언 된 곳이나 구현과 방법이 서로간에 어떻게 전달되었는지를보기 위해 좀 더 많은 경험을 가진 누군가에게 유용 할 것이라고 생각한 뒤에 생각했다. 나는 분명히 당신의 충고를 받아들이고 미래의 풍자적 인 게시물을 개선 할 것이고, 스네이크 톤은 실제로 필요하지 않습니다. – Tukajo

관련 문제