我有一个表,该表使用来自 CoreData 和 NSFetchedResultsController 的数据填充。它使用一个具有 bool 值的属性填充两个部分。但是我想把每个部分的数据放到两个数组中进行进一步处理。
有没有办法将Fetched Results Controller生成的两个section中的数据保存到不同的数组中。
我尝试使用用于使用代码创建部分的属性值创建两个谓词:
var context = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext!
var frc: NSFetchedResultsController = NSFetchedResultsController()
func getFetchedResultsController() -> NSFetchedResultsController {
frc = NSFetchedResultsController(
fetchRequest: fetchRequest(),
managedObjectContext: context,
sectionNameKeyPath: "frequent",
cacheName: nil)
return frc
}
//Fetch request of done Items to populate the two sections (Frequent and nonFrequent)
func fetchRequest() -> NSFetchRequest {
let fetchRequest = NSFetchRequest(entityName: "Item")
let frequentSortDescriptor = NSSortDescriptor(key: "frequent", ascending: false)
let nameSortDescriptor = NSSortDescriptor(key: "name", ascending: true)
let predicate = NSPredicate(format: "done == %@", true)
fetchRequest.predicate = predicate
fetchRequest.sortDescriptors = [frequentSortDescriptor, nameSortDescriptor]
return fetchRequest
}
override func viewDidLoad() {
super.viewDidLoad()
frc = getFetchedResultsController()
frc.delegate = self
frc.performFetch(nil)
frc.fetchRequest.predicate = NSPredicate(format: "frequent == %@", true)
if let freqResults = frc.fetchedObjects as? [Item] {
freq = freqResults
}
frc.fetchRequest.predicate = NSPredicate(format: "frequent == %@", false)
if let nonFreqResults = frc.fetchedObjects as? [Item] {
nonFreq = nonFreqResults
}
println("\(freq.count) Fav and \(nonFreq.count) Non Fav")
}
但末尾的“println()”将两个数组打印为各有 10 个计数。但实际上,'freq.count' 应该有 7 个,'nonFreq.count' 应该有 3 个项目,两个部分的总和为 10 个项目。
这些部分显示正确的项目。我只是无法将这些项目保存到数组中。
是否有可能因为第一个“fetchRequst()”已经应用了一个谓词,而我正在尝试对其应用第二个谓词或什么?如果是这样,我该如何解决?
最佳答案
在获取结果 Controller 的 fetchedObjects
发生变化之前,您必须调用 performFetch()
。
相反,您可能只使用过滤器。
let frequent = fetchedObjects.filter() { $0.frequent }
let infrequent = fetchedObjects.filter() { !$0.frequent }
关于ios - NSFetchedResultsController swift 中的两个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30969504/