CoreDataのEntityのAttributesにidというキーを作った時に、その中に入れるユニークな値に何を使うか。
##そもそも
CoreDataには自動で入れてくれる機能がないので自分でユニークなIDを作る必要がある
##結論
###UUIDを使う
let uuid: String = NSUUID().UUIDString
Cocoaが用意してくれているメソッド。
実行する度に乱数を返してくれる。
##他の方法
####NSManagedObjectIDを使う(ボツ案)
CoreDataを使ってsqliteファイルを生成するとZ_PK,Z_ENT,Z_OPTというカラムが自動で生成される。Z_PKがPrimaryKeyになる。
NSManagedObject は NSManagedObjectID というIDを持っていて、それの最後がZ_PKと一致する。
println(managedObject.objectID)
//結果↓
x-coredata://987880C1-D4E2-4753-A8B8-A0EABF9F4534/Person/p64
この最後の64がZ_PKと一致するので、これをEntityユニークのIDにできるかもしれない。
が、NSManagedObjectIDのリファレンスにこうある。
The object ID of the receiver. (read-only)
If the receiver is a fault, accessing this property does not cause it to fire.
Important
If the receiver has not yet been saved, the object ID is a temporary value that will change when the object is saved.
ManagedObjectが保存される前と後で違う値が返ってくる。
ということでNSManagedObjectIDは使えないことが判明
###idをIntegerで保存したい場合
自力で頑張るしかない。