2015-10-26 29 views
0

說取對象我有5個Alphabet對象與(String類型)的給定字母的屬性letter保存到核心數據。NSFetchRequest與下一個最接近的串屬性

Alphabet.letter = "A" 
Alphabet.letter = "M" 
Alphabet.letter = "G" 
Alphabet.letter = "T" 
Alphabet.letter = "D" 

我可以讓他們來分類有以下:

let alphabetFetch = NSFetchRequest(entityName: "Alphabet") 
let alphabetSort = NSSortDescriptor(key: "letter", ascending: true) 

Alphabet.letter = "A" 
Alphabet.letter = "D" 
Alphabet.letter = "G" 
Alphabet.letter = "M" 
Alphabet.letter = "T" 

現在我想「G」後,僅檢索與最接近以下letter值字母表對象(在這個例子中,我想要檢索帶有字母屬性值「M」的字母表對象)。我將如何構建一個獲取請求以最有效地獲取此對象?

回答

2

除了排序描述符中,添加謂詞和取限制 於該請求:

let request = NSFetchRequest(entityName: "Alphabet") 
request.sortDescriptors = [ NSSortDescriptor(key: "letter", ascending: true) ] 
request.predicate = NSPredicate(format: "letter > %@", "G") 
request.fetchLimit = 1 

取指令請求返回與單個元件的陣列,其 是第一匹配的對象(根據排序描述符),或者如果沒有這樣的元素 存在一個空數組。

+0

我有一個附加問題;如果你想擴展這個功能總是在循環返回的下一個值(例如「T」的輸入返回一個對象「A」),你會如何延長這一要求? – Aaron

+0

@Aaron:我不認爲這是可能與一個單一的讀取請求。核心數據提取請求中只有有限的一組比較方法可用。如果上述請求返回一個空數組,那麼你就必須出具無謂語另一個請求來獲得的第一個值。 –

+0

好的,理解。 – Aaron

1

使用謂詞創建NSFetchRequest篩選項目>「G」和升序。

let letter = "G" 
let letterRequest = NSFetchRequest(entityName:"Alphabet") 
letterRequest.predicate = NSPredicate(format: "letter > %@", letter) 
letterRequest.sortDescriptors = [NSSortDescriptor(key: "letter", ascending: true)] 
letterRequest.fetchLimit = 1