我对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)
编译器可以这样说:
Cast from 'NSManagedObjectContext?' to unrelated type 'NSArray' always fails
Cannot assign a value of type '[AnyObject]' to a value of type '[Note]'
我看到很多香草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
}
数组的任何建议吗?
答案 0 :(得分:1)
托管对象上下文与数组无关。它不能被“填充”对象。它只是一个抽象类,可以让您访问您的数据。
从Core Data存储中获取对象的方式如下:创建获取请求,可选地为请求添加过滤器和/或排序,获取对象。
let request = NSFetchRequest(entityName:"Note")
let result = managedObjectContext.executeFetchRequest(request error:nil) as [Note]
您现在可以过滤此数组(在转换为NSArray后使用filteredArrayUsingPredicate
),也可以将谓词添加到原始获取请求(甚至更高效)。