2016-04-02 9 views
0

NSTokenFieldを使用してデータ入力を許可すると、ユーザーが入力を開始するとTokenFieldが提案します。すでにコアデータの中にあるものを提案したい。これはNSManagedObjectsの配列を返す私はスーパーの場合、細胞移動(これは、すべてのカスタムテーブルビューのセル内に起こっている)と呼ばれているこの機能を持ってこれを行うにはコアデータ - valueForKey -OSXを使用してNSManagedObject配列を文字列の配列に変更します。

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 { 

    } 

、今私はすべてのためにしたいです管理対象オブジェクト内のオブジェクトは、私はこのトークンフィールド機能私はこれを行うだろうか

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"] 

の内側にそれを返すことができるように、文字列の配列に挿入してvalueForKey(「サブジェクト名」)をゲット?感謝:)

答えて

0

はこれを試してみてください:

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

これは、すべてのsubjectInformation項目のsubjectNamesの配列を返す必要があります。

+0

のthatsにあなたの結果の配列をキャストします – Eli

1

NSManagedObjectを適切にサブクラス化した場合は、表現力豊かなスウィフトスタイルのフィルタとマップを使用できます。私にエラー申し訳ありませんが、私は配列を作るためになってしまったし、すべてのNSMutableの配列をループして、配列にそれらを追加しましたあなたは[SubjectInformation]

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