2015-10-26 56 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