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

时间:2015-02-24 03:36:37

标签: swift core-data nsarray nsmanagedobject ios8.1

我对iOS比较陌生,我发现自己在核心数据分配上被“扔到了狼群”。我正在尝试使用Note创建一个NSPredicate个对象数组来搜索managedObjectContext。它不起作用,但我认为我接近“终点线”。这就是我所拥有的:

我有一个managedObjectContext实例化,其中有Note个对象。

我在类的顶部创建了一个名为filteredNotes的变量,它被实例化为空(至少我认为是这样)。

var filteredNotes: [Note] = []

再往下,我有一个函数,我想用填充谓词的注释对象“填充”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]'
  3. 我看到很多香草NSArrays(不是managedObjectContexts)这样做的例子,我很难理解为什么我不能用managedObjectContext来填充{ {1}}对象。

    以下是我的注释:NSManagedObject看起来像:

    Note

    有关如何创建import Foundation import CoreData class Note: NSManagedObject { @NSManaged var dateCreated: NSDate @NSManaged var dateEdited: NSDate @NSManaged var noteTitle: String @NSManaged var noteBody: String } 数组的任何建议吗?

1 个答案:

答案 0 :(得分:1)

托管对象上下文与数组无关。它不能被“填充”对象。它只是一个抽象类,可以让您访问您的数据。

从Core Data存储中获取对象的方式如下:创建获取请求,可选地为请求添加过滤器和/或排序,获取对象。

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

您现在可以过滤此数组(在转换为NSArray后使用filteredArrayUsingPredicate),也可以将谓词添加到原始获取请求(甚至更高效)。