ios - NSFetchedResultsController swift 中的两个数组

标签 ios swift core-data nsfetchedresultscontroller

我有一个表,该表使用来自 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/

相关文章:

cocoa - 核心数据 dao 模式

ios - TouchableWithoutFeedback 破坏了 ScrollView。如何修复而不将 View 放入 ScrollView 中?

ios - 如何替换/更新保存在核心数据中的数据

ios - UIWebview 重新加载不起作用

ios - 将现有模型保存到 CoreData DB

ios - CoreData : warning: Unable to load class named 'WEEReadings' for entity 'Readings' . 找不到类,改用默认的 NSManagedObject

IOS 流套接字

iphone - 从哪里下载 xcode 5 中的 os 6 模拟器

ios - 无法复制 Apple iOS 应用审查崩溃

ios - ld : SDK. 使用旧版本的 Swift 语言 (XX) 编译的框架比以前的 ObjC 框架文件(未知 ABI 版本 YYY)