KSExtensibleManagedObject でなんでも CoreData に
The Mac DEVELOPER NETWORK の Core Data Managed Object Extension Class 経由で、Mike Abdullah の KSExtensibleManagedObject。
CoreData でない実装のデータモデルを NSManagedObject に再実装することなく CoreData で利用したりするために利用できるプロキシのようなもの。
利用のしかたは、
- KSExtensibleManagedObject の extensiblePropertiesDataKey というキーにデータをセットする
- データは Key-Value Coding に対応していること
- データは NSCoding に対応していること
たとえばこんな感じ。MyData が非 CoreData のデータオブジェクト。
- obj.key1 -> NSManagedObject.key1
- obj.key2 -> NSManagedObject.key2
- obj.key3 -> MyData.key3
- obj.key4 -> MyData.key4
- obj.key5 -> MyData.key5
- obj.extensiblePropertiesDataKey -> MyData
SandVox ではすごく役に立ったらしいのだけど、どうもピンとこない。永続化層を前の実装から CoreData のストアに移すだろうから、そのギャップのケアにもけっこう手がかかりそう。
実装は単純で、 valueForUndefinedKey:, setValue:forUndefinedKey: を使ってラップしたデータの KVC アクセスに変換しているだけ。undefinedKey なので、ちょっとだけ遅いかもしんない。コードはわりと小さいし、Key-Value Coding や Key-Value Observing それに CoreData/NSManagedObject のモデル外での属性追加の手法を見てみるのにはよいと思う。