-1

所以我有一个方法 A,它基本上检查 UISwitches 的当前状态是什么,然后通过文本短信服务 API 提醒用户。然而; 因为它一直在检查引脚的状态,所以我不希望它发送 50000 次文本(向 SMS 服务发送垃圾邮件);此方法中的最后一个 FOR 循环是检查是否应该检查用户的循环;但是,在当前状态下,每当应用程序运行时,它都会不断发送垃圾邮件。

谢谢,如果您需要更多说明,请询问。

方法一:

- (void)setInput:(NCDigitalInput *)input
    {
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        NSString *baseString;
        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;
        }
        for(int i = 0; i<switchArrayIn.count; i++){
            if(![defaults boolForKey:[NSString stringWithFormat:@"digitalInput%dRecentlyAlerted",i]] && ([[switchArrayIn objectAtIndex:i] isOn]) && ([defaults boolForKey:[NSString stringWithFormat:@"digitalInput%dBool",i]]) && ([defaults boolForKey:[NSString stringWithFormat:@"digitalInputAlertOn%dBool",i]])){
                [defaults setBool:TRUE forKey:@"digitalInput%dRecentlyAlerted"];
                baseString = [defaults objectForKey:@"digitalInput%d"];
                NSString *stringSMS = [baseString stringByAppendingString:@" has turned on"];
                [self digitalSMSCheck:i :stringSMS];
            }
            if(![defaults boolForKey:[NSString stringWithFormat:@"digitalInput%dRecentlyAlerted",i]] && !([[switchArrayIn objectAtIndex:i] isOn]) && ([defaults boolForKey:[NSString stringWithFormat:@"digitalInput%dBool",i]]) && ([defaults boolForKey:[NSString stringWithFormat:@"digitalInputAlertOff%dBool",i]])){
                [defaults setBool:TRUE forKey:@"digitalInput%dRecentlyAlerted"];
                baseString = [defaults objectForKey:@"digitalInput%d"];
                NSString *stringSMS = [baseString stringByAppendingString:@" has turned off"];

                [self digitalSMSCheck:i :stringSMS];
            }
        }}
4

1 回答 1

3

改变你的设计。轮询很糟糕,而且没有必要。

将 IBAction 附加到每个交换机。

使开关的操作方法设置属性。如果您有很多开关,您可以在每个开关上放置标签,并使用一个方法来处理所有这些开关。

然后你可以在你的属性上创建自定义设置器,或者使用键值观察来观察主机属性的变化。查看 Xcode 文档中的“Key-Value Observing Programming Guide 简介”,了解其工作原理。

哪种方法更好取决于您的应用程序的细节,以及您的个人品味。KVC 比其他方法慢一点,但效果很好。

于 2014-02-14T17:28:12.470 回答