嘿伙计们,我有这两种方法;而且我似乎无法弄清楚为什么我digitalSMSCheck
没有被调用。
我的方法从不断变化的外部源中setInput
检索对象,因此它永远不是静态值。uint8_t
然后setInput方法调用另一个方法;digitalInputAlertSystem
它传入旧uint8_t
对象并生成一个新uint8_t
对象来比较两者。
然后,我想用一个 for 循环遍历对象的 8 位,如果两个对象不相同uint8_t
,它将检查每个位是否被分配了与方法中的原始uint8_t
对象相同的值;然后它将找到它们在位方面的不同之处,并通过该方法发送 SMS 警报(这是未正确调用的方法)。setInput
uint8_t
digitalSMSCheck
- (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];
});
});
}