2014-02-11 68 views
0

我想檢查我的UITextFields中的條件,基本上是否更改,如果是這樣,我想更改數據並保存到數據庫。我的代碼看起來是這樣的:有重複If語句的替代方法嗎?

if (![self.nomeTextField.text isEqualToString:self.usuario[@"nome"]]) { 
    self.usuario[@"nome"] = self.nomeTextField.text; 
} 
if (![self.sobrenomeTextField.text isEqualToString:self.usuario[@"sobrenome"]]) { 
    self.usuario[@"sobrenome"] = self.sobrenomeTextField.text; 
} 

if (![self.nascimentoTextField.text isEqualToString:self.usuario[@"nascimento"]]) { 
    self.usuario[@"nascimento"] = self.nascimentoTextField.text; 

這個代碼是內部button行動method。當用戶按button時,它會檢查已更改的UITextFields並將值更新爲我的object。這樣,我只做一個網絡連接一次保存object

現在,我的問題是,如果這樣可以重複if statements那樣,並且如果有更簡單的方法來做到這一點。我不關心UITextFields,我知道我可以使用delegate一次更改每個textField並稍後保存。但我在尋找的是瞭解我所做的是否正確,以及是否有替代這些重複的if statements

+0

您是否熟悉'switch' /'case'語句? – admdrew

+0

你的意思是像[switch語句](http://www.techotopia.com/index。PHP/The_Objective-C_switch_Statement)? – Zzyrk

+0

假設它是建立一個改變屬性的字典,但你將永遠必須有一個完整的字典... – Wain

回答

1

我會執行一個UITextFieldDelegatetextFieldDidEndEditing:方法,並跟蹤哪些字段在那裏編輯。然後,點擊按鈕時,您可以瀏覽該列表並更新相關字段。

或者您可以修改此方法並在textFieldDidEndEditing:中更新您的對象。

2

在你的情況下,switch語句不起作用,因爲你總是想處理所有的文本字段。在這種情況下,您可以將所有文本字段放入字典中,其中的鍵是self.usuario字典中鍵的名稱。然後,您可以遍歷數組,並使用您的密鑰名稱和相關的文本字段進行驗證。

如果您希望檢查每個文本字段的變化,那麼您需要能夠將作爲參數傳遞的文本字段與鍵名顯式關聯起來。這可以通過搜索來完成,或者您可以考慮使用objc_setAssociatedObject來關聯密鑰字符串。

無論哪種情況,使用某種數據結構都可以幫助減少代碼。但這是一個折衷。減少代碼通常意味着更大的內存使用量,但通常更容易理解並且通常不易出錯。

1

如何使用字典,然後遍歷字典中的每個鍵值對來檢查字段?

將每個要檢查的字段設置爲一個鍵(例如self.nomeTextField),並將測試值設置爲值(self.usario [@「nome」])。

NSDictionary *myDictionary = @{ 
    self.nomeTextField : self.usario[@"nome"], 
    self.sobrenomeTextField : self.usario[@"sobrenome"], 
    AND SO ON AND SO FORTH . . . 
}; 

然後,只需翻翻字典,運行的是遍歷沿着這些線路

for ($KEY in myDictionary) 
    if (!$KEY.text isEqualToString:$VALUE) { 
     DO SOMETHING HERE 
    } 

這具有易於擴展的好處,你應該想在未來更多的領域。

如果我的代碼/概念在這裏存在空白,我很抱歉。我目前無法測試特定的代碼來驗證功能。

希望這會有所幫助!祝你好運!

+0

我不認爲你可以添加文本字段作爲密鑰,因爲它不支持所需的協議。這與我的回答中的一點基本相同,並設置了'nome'或'sobrenome'的鍵值,並且文本字段的值可以很好地工作。 – Wain