Базовые данные - Измените массив NSManagedObject на массив строк, используя valueForKey -OSX

Поэтому, используя NSTokenField, чтобы разрешить ввод данных, TokenField предложит что-то, когда пользователь начнет печатать. Я хочу, чтобы он предлагал вещи, которые уже находятся внутри основных данных.

Для этого у меня вызывается эта функция, когда ячейка перемещается в суперпредставление (все это происходит внутри настраиваемой ячейки табличного представления)

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") в виде вставки его в массив строк, чтобы я мог вернуть его в этом поле токена. Function

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 ответа

Если вы правильно подкласс NSManagedObject Вы можете использовать выразительные фильтры и карты в стиле Swift. Вы бы бросили свой массив результатов в [SubjectInformation] а также

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

Попробуй это:

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

Это должно вернуть массив subjectNames из всех subjectInformation Предметы.

Другие вопросы по тегам