0

嘿伙计们,我有这两种方法;而且我似乎无法弄清楚为什么我digitalSMSCheck没有被调用。

我的方法从不断变化的外部源中setInput检索对象,因此它永远不是静态值。uint8_t然后setInput方法调用另一个方法;digitalInputAlertSystem它传入旧uint8_t对象并生成一个新uint8_t对象来比较两者。

然后,我想用一个 for 循环遍历对象的 8 位,如果两个对象不相同uint8_t,它将检查每个位是否被分配了与方法中的原始uint8_t对象相同的值;然后它将找到它们在位方面的不同之处,并通过该方法发送 SMS 警报(这是未正确调用的方法)。setInputuint8_tdigitalSMSCheck

    - (void)setInput:(NCDigitalInput *)input
{
    NSLog(@"setInput called");
    uint8_t value = input.value;
    self.inputLabel.text = [NSString stringWithFormat:@"0x%0.2X",value];
    for (UISwitch *temp in switchArrayIn)
    {
        temp.on = (value & 1);
        value >>= 1;
    }
    [self digitalInputAlertSystem:input :value];
}



 - (void) digitalInputAlertSystem:(NCDigitalInput *)input :(uint8_t) oldValue{
        NSLog(@"digitalInputALertSystem called");

        uint8_t value = input.value;
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        NSString *baseString;
        NSString *smsString;

        for (int i = 0; i<switchArrayIn.count; i++){
            if((value) != (oldValue)){
                if((value & 1) ==  1){
                    baseString = [defaults objectForKey:[NSString stringWithFormat:@"digitalInput%d",i]];
                    smsString = [baseString stringByAppendingFormat:@" has turned on"];
                    if(![defaults boolForKey:[NSString stringWithFormat:@"digitalInput%dRecentlyAlerted",i]]){
                        [self digitalSMSCheck:i :smsString];
                        [defaults setBool:TRUE forKey:[NSString stringWithFormat:@"digitalInput%dRecentlyAlerted",i]];
                    }
                }
                else if((value & 1) !=  1){
                    baseString = [defaults objectForKey:[NSString stringWithFormat:@"digitalInput%d",i]];
                    smsString = [baseString stringByAppendingFormat:@" has turned off"];
                    if(![defaults boolForKey:[NSString stringWithFormat:@"digitalInput%dRecentlyAlerted",i]]){
                        [self digitalSMSCheck:i :smsString];
                        [defaults setBool:TRUE forKey:[NSString stringWithFormat:@"digitalInput%dRecentlyAlerted",i]];
                    }
                }
            }
            value >>=1;
            oldValue >>=1;
            //[defaults setBool:(value & i) forKey:[NSString stringWithFormat:@"digitalInput%dValueBool",i]];

        }
    }

这是 digitalSMSCheck 方法:

- (void) digitalSMSCheck:(int) pinNum :(NSString *)pinChangedNotificationValue{

    //the time permitted between alerts. A pin, when sending an alert, will be unable to send another for 3 seconds.
    dispatch_queue_t myQueue = dispatch_queue_create(("com.my.cool.new.queue"), DISPATCH_QUEUE_CONCURRENT);
        double delayInSeconds = 10.0;
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds*NSEC_PER_SEC));
    dispatch_after(popTime, myQueue, ^(void){
        NSLog(@"The method DigitalSMSCheck was called");
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        for (int i = 0; i<=7; i++) {
            if ((i == pinNum) && !([defaults boolForKey:[NSString stringWithFormat:@"digitalInput%dRecentlyAlerted",pinNum%8]])) {
                [defaults setBool:FALSE forKey:[NSString stringWithFormat:@"digitalInput%dRecentlyAlerted",pinNum%8]];
                NSLog(@"The boolean for checking was successfully resetted to false; 1");
            }
        }
        for (int i = 8; i<=15; i++) {
            if ((i == pinNum) && !([defaults boolForKey:[NSString stringWithFormat:@"digitalOutput%dRecentlyAlerted",pinNum%8]])) {
                [defaults setBool:FALSE forKey:[NSString stringWithFormat:@"digitalOutput%dRecentlyAlerted",pinNum%8]];


                NSLog(@"The boolean for checking was successfully resetted to false; 2");
            }
        }


        dispatch_async(dispatch_get_main_queue(),^{
            [appDelegate watchPins:pinChangedNotificationValue];
            [self updateInput];
            [self updateOutput];
            [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait animated:FALSE];

            [self setColors];
            [self setOutputSwitches];
        });

    });
}
4

0 回答 0