19
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CoreDataで使用するユニークのIDについて(Swift)

Posted at

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で保存したい場合
自力で頑張るしかない。

19
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?