2016-12-25 122 views
0

从核心数据提取,我可以通过使用NSPredicate来过滤我所得到的结果,但只能使用持久属性,而不能使用瞬态属性(as per this article from Apple)。可以使用什么方法使用瞬态属性或某种计算属性来进一步过滤数据?如何过滤从核心数据中获取的数据?

(这个问题的an earlier question细化,这是过于宽泛的。)

+0

简单地遍历你提取的结果,并采用适合你的过滤标准的对象,使用'for'循环,'.filer'等常用技术。 – shallowThought

+0

@shallowThought - 非常感谢 - 这是我需要的提示。我的结果转载如下,其他人可能在我所在的地方,并会发现这有用,但这是您的答案,让我朝着正确的方向前进。 – ConfusionTowers

回答

0

与感谢@shallowThought,答案相当简单:

已经建立了我的谓词,过滤使用以下行代码:

filteredLines = theLines.filter {myPredicate.evaluate(with: ($0))} 

在这种情况下,theLines就是从CoreData检索,并比如说myPredicate是什么我想过滤的,如

let p1 = NSPredicate(format: "lineNumber > 4") 
    let p2 = NSPredicate(format: "lineNumber < 7") 
//  let minLineNumberStr = "4" 
//  let p3 = NSPredicate(format: "lineNumber >= %@", minLineNumberStr) // same as p1, but more flexible 

    var predArray : [NSPredicate] = [] 

// Comment out the predicates we DON'T actually use: 
     predArray.append(p1) 
     predArray.append(p2) 
//  predArray.append(p3) 

    let myPredicate = NSCompoundPredicate(andPredicateWithSubpredicates: predArray) 

在这种情况下,如果谓词包含瞬态属性,则过滤按预期工作(即,瞬态属性被正确评估);从核心数据获取时,具有瞬态属性的过滤器不会抛出错误,但它也不会返回任何结果。

资源,帮助我到达这个答案:"Higher Order Functions: Map, Filter, Reduce, and More

  • 堆栈溢出文章:

    希望这对我有同样问题的其他人有帮助。