2014-02-14 82 views
-1

所以我有一個方法A,它主要檢查UISwitches的當前狀態,然後通過文本SMS服務API提醒用戶。然而;因爲它不斷地檢查引腳的狀態,我不希望它發送文本50000次(垃圾郵件的SMS服務);該方法中的最後一個FOR循環是檢查是否應該檢查用戶的那個循環;然而,隨着它的當前狀態,它不斷地在應用程序運行時發生垃圾郵件。如何防止這種方法在運行時經常調用

謝謝,如果你需要更多的澄清請問。

方法A:

- (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]; 
      } 
     }} 
+1

難道你只是有一個方法,只要UISwitch的值發生變化就調用,而不是檢查循環中的每個UISwitch? – Kamaros

+0

這基本上是一種故障保護功能,在交換機自行關閉的情況下會發出警報(這會在給定應用程序的情況下發生)。 – Tukajo

+0

目前尚不清楚爲什麼你無法檢測到交換機的變化。這一切都發生在你的應用程序中,對吧?它是用戶事件或更改開關的代碼。 –

回答

3

改變設計。輪詢是不好的,也沒有必要。

將IBActions附加到每個交換機。

使交換機的操作方法設置屬性。如果您有很多交換機,您可以在每臺交換機上放置標籤,並使用一種方法處理所有這些交換機。

然後,您可以在屬性上創建自定義設置器,或使用鍵值觀察來監視主機屬性的更改。查看Xcode文檔中的「Key-Value Observing編程指南簡介」,瞭解它是如何工作的。

哪種方法更好取決於您的應用程序的細節以及您的個人品味。 KVC比其他方法稍慢,但效果很好。

+0

我按照我的代碼隱含實現了KVC;但是我需要輪詢(除非有另一種方式)交換機,因爲它正在監聽根據應用程序的目的可能發生的非用戶更改。在發生非用戶變更的情況下,投票不是唯一可以說明的方法嗎? – Tukajo

+0

目前尚不清楚你的意思。什麼是「非用戶變更」,什麼在變化?您是否有因網絡事件,硬件設備輸入或其他原因而可能發生變化的狀態變量?另外,你說「我的代碼實現了KVC的實現......」什麼代碼?你還沒有發佈任何代碼。您需要提供一個更清晰的解釋,說明您正在嘗試做什麼,並解釋您使用的術語。 「......它經常檢查引腳的狀態......」什麼引腳?他們是什麼?如何在沒有用戶交互的情況下更改「引腳」? –

+0

非用戶更改是由讀取ipod值的外部設備所做的更改;如果該設備出現故障,則會發生更改。即;用戶打開UISwitch 0,它從硬件方面失敗,並告訴交換機關閉並警告用戶它已經失敗......一個故障可能是由各種與硬件有關的問題引起的。 – Tukajo

相關問題