2011-05-24 50 views
0

我無法在特定條件下獲取某一行。有條件獲取

我有一個實體,稱爲UserAccounts它包含四個屬性:userNamepassWorduserFullNameuserLevel

對於登錄,我必須得到與userName匹配的passWord。爲此,我有兩個文本字段,userNameTFpassWordTF。 我必須獲取匹配userNameTF.stringValue的實體(我使用SQL來比較我的請求)的行,然後檢查passWord屬性是否等於passWordTF.stringValue

現在我可以用走的userNamepassWord陣列從我的核心數據存儲分開:

NSArray *userName = [[userAccountsArray arrangedObjects] valueForKey:@"userName"]; 
NSArray *passWord = [[userAccountsArray arrangedObjects] valueForKey:@"passWord"]; 

但是這兩個數組有沒有關係的對方,並與進入我所不能比擬的密碼用戶名。

我之前在Visual Studio中使用SQL執行此操作:select "password" from userAccounts where userName = @"username"然後將結果與輸入的密碼進行比較,但是我找不到一個方法來獲取具有實體的某行,並對其屬性執行某些操作。

+0

我不太瞭解核心數據,但看起來你正在做的事情是錯誤的。你應該能夠保存一個既有用戶名又有密碼的實體,而不是單獨存儲用戶名和密碼。 I.e您應該存儲一組用戶,而不是用戶名或密碼。 – vakio 2011-05-24 18:20:36

+0

@Josh Caswell,是的你是對的,我的問題正是我如何存儲包含實體的2個屬性的數組。 無論如何,感謝您的快速回答和修改。 – Prooshani 2011-05-24 18:31:17

+0

@Prooshani:不客氣,但我只做了編輯,而不是回覆。你想給@vakio留言來談論這個評論。 – 2011-05-24 18:32:38

回答

0

那麼,最後我找到了解決我的問題再次的方法!

使用此代碼我可以檢索關於一個特定屬性值的實體記錄的整個屬性。

NSArray *userAccounts=[userAccountsArray arrangedObjects]; 
NSArray *matchingAccounts=[userAccounts filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"%K == %@",@"userName",userNameTF.stringValue]]; 
NSString *matchedPassWords=[[matchingAccounts valueForKey:@"passWord"]objectAtIndex:0]; 

這樣我就可以找到密碼相關的userName用戶在文本框userNameTF輸入!

無論如何,這是我解決問題的方法,我認爲那裏有更多的解決方案。

謝謝大家。

0

請記住,Core Data是一個對象圖持久性庫; SQL是從你身上抽象出來的,用SQL術語思考往往會導致混淆。

要解決此問題,您希望使用指定用戶名的謂詞創建提取請求。如果用戶存在,它將返回一個包含一個用戶對象的數組(假設名稱是唯一的)。然後,您只需將您的密碼字符串與用戶管理對象上的密碼屬性進行比較,以檢查它們是否相同。

+0

我可以獲取userNames,當然它們是唯一的。 所以你要告訴我,我的讀取結果是一個包含所有屬性(4個屬性)的數組,並且如果用戶名是唯一的並且可用,那麼我的密碼屬性是否存在(作爲屬性)以將其與輸入的密碼進行比較? – Prooshani 2011-05-24 18:51:18

+0

你並沒有獲取一組屬性,而是獲取長度爲1的NSManagedObject(子類)數組。每個對象都有你定義的屬性;用戶名,密碼等。記住,核心數據是一個對象圖,而不是從數據庫中選擇行。 – 2011-05-25 00:48:05

+0

我瞭解SQL中對象圖和行/列的區別,問題是我不知道如何能夠獲取有關另一個屬性條件的某些屬性,所以請幫我找到答案。 – Prooshani 2011-05-25 07:55:36