Базовые данные - Измените массив 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
Предметы.