NSFetchRequest获取具有下一个最接近的字符串属性的对象

时间:2015-10-26 20:46:18

标签: ios swift core-data nspredicate nsfetchrequest

假设我有5个Alphabet个对象,其中给定字母(String类型)的属性letter持久保存到Core Data。

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值的Alphabet对象(在此示例中,我想要检索具有字母属性值“M”的Alphabet对象)。如何构建一个获取请求以最有效地获取此对象?

2 个答案:

答案 0 :(得分:2)

除了排序描述符之外,还要添加谓词和提取限制 请求:

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

获取请求返回一个包含单个元素的数组 是第一个匹配的对象(根据排序描述符),如果没有这样的元素,则为空数组 存在。

答案 1 :(得分: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