2016-04-02 10 views
0

Итак, используя NSTokenField для ввода данных, TokenField предложит что-то, когда пользователь начнет вводить текст. Я хочу, чтобы он предлагал вещи, которые уже находятся внутри основных данных.Основные данные. Измените массив NSManagedObject в массив строк с использованием valueForKey -OSX

Для этого я эта функция вызывается, когда клетка переходит в 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"] 

Как бы я это сделать? Спасибо :)

ответ

0

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

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

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

+0

Thats дал мне ошибку извините, я в конечном итоге того, чтобы создать массив, а затем цикл через все NSMutable массивов и добавления их в массив – Eli

1

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

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