将从 managedObjectContext 过滤的对象转换为 NSArray

Turning objects filtered from managedObjectContext into an NSArray

我是 iOS 的新手,我发现自己 "thrown to the wolves" 正在接受核心数据作业。我正在尝试使用 NSPredicate 创建一个 Note 对象数组来搜索 managedObjectContext。它不起作用,但我认为我接近 "finish line"。这是我得到的:

我实例化了一个 managedObjectContext,里面有 Note 个对象。

我在实例化为空的 class 顶部创建了一个名为 filteredNotes 的变量(至少我是这么认为的)。

var filteredNotes: [Note] = []

再往下,我有一个函数,我想 "fill up" filteredNote 数组,其中包含与谓词匹配的注释对象。这是我正在尝试的方法:

    let resultPredicate = NSPredicate(format: "noteTitle contains[c] %@", searchBar.text)

    filteredNotes = (managedObjectContext as! NSArray).filteredArrayUsingPredicate(resultPredicate)

编译器对此有如下说法:

  1. Cast from 'NSManagedObjectContext?' to unrelated type 'NSArray' always fails
  2. Cannot assign a value of type '[AnyObject]' to a value of type '[Note]'

我看到很多香草 NSArrays(不是 managedObjectContexts)这样做的例子,我很困惑为什么我不能用 managedObjectContext 来做这件事有 Note 个对象。

这是我的注释:NSManagedObject 的样子:

import Foundation
import CoreData

class Note: NSManagedObject {

    @NSManaged var dateCreated: NSDate
    @NSManaged var dateEdited: NSDate
    @NSManaged var noteTitle: String
    @NSManaged var noteBody: String

}

关于如何创建 filteredNote 数组有什么建议吗?

托管对象上下文与数组无关。它不能 "filled" 与对象。它只是一个抽象 class,让您可以访问您的数据。

从 Core Data 存储中获取对象的方式如下:发出获取请求,可选地向请求添加过滤器 and/or 排序,获取对象。

let request = NSFetchRequest(entityName:"Note")
let result = managedObjectContext.executeFetchRequest(request error:nil) as [Note]

您现在可以过滤此数组(在转换为 NSArray 后使用 filteredArrayUsingPredicate),或者您可以将谓词添加到原始获取请求(这应该更有效)。