核心数据 - 使用valueForKey -OSX将NSManagedObject数组更改为字符串数组

时间:2016-04-02 03:27:43

标签: swift core-data nsarray nstokenfield

因此,使用NSTokenField来允许数据输入,TokenField会在用户开始输入时提示。我希望它能够提出核心数据中的内容。

要做到这一点,我在单元格移动到superview时调用此函数(这一切都发生在自定义表格视图单元格内)

var subjectInformation = [NSManagedObject]()

  let appDel = NSApplication.sharedApplication().delegate as! AppDelegate

    let context = appDel.managedObjectContext

    let fetchRequest = NSFetchRequest(entityName: "SubjectInformation")

    do {
        let results = try context.executeFetchRequest(fetchRequest)
        subjectInformation = results as! [NSManagedObject]
    } catch {

    }

这会返回一个NSManagedObjects数组,现在我想要托管对象中的每个对象获取valueForKey(“subjectName”),因为它将其插入到一个字符串数组中,以便我可以在此标记字段内返回函数

func tokenField(tokenField: NSTokenField, completionsForSubstring substring: String, indexOfToken tokenIndex: Int, indexOfSelectedItem selectedIndex: UnsafeMutablePointer<Int>) -> [AnyObject]? {

return subjectInformation //this is where is should return an array eg; ["English","Maths","Science"]

我该怎么做?谢谢:))

2 个答案:

答案 0 :(得分:1)

如果您正确地对NSManagedObject进行了子类化,则可以使用富有表现力的Swift样式过滤器和地图。您可以将结果数组转换为[SubjectInformation]

let subjectList = subjectInformation.map { $0.subjectName }

答案 1 :(得分:0)

试试这个:

(subjectInformation as! NSArray).valueForKeyPath("@unionOfObjects.subjectName")

这应该返回所有subjectNames项的subjectInformation数组。