2016-08-09 6 views
0

私はコアデータが基本的にSQLiteデータベースであることを知りました。各エンティティは別のテーブルです。エンティティではないテーブルもあります(Z_METADATAZ_MODELCACHEZ_PRIMARYKEYなど)。彼らが何をするのか分からない。NSManagedObjectの主キーの値を取得するにはどうすればよいですか?

とにかく、「エンティティテーブル」のフィールドは、データモデルで追加したプロパティといくつかの追加機能とほぼ同じであることがわかりました。たとえば、私のエンティティにdateという1つのプロパティしかない場合などです。テーブルのフィールドは、ZDATEフィールド、Z_PK,Z_ENT、およびZ_OPTです。

明らかに、各エンティティにはZ_PKフィールドに格納されている主キーがあります。私は特定のNSManagedObjectのこの主キーの価値を得たいです。特定のプライマリキーを持つNSManagedObjectのデータベースを照会したいとします。

だから基本的には、このような何か:

let pk = myManagedObject.primaryKey 
// the below should return myManagedObject 
managedObjContext.objectWithPrimaryKey(someEntityDescription, pk) 

私はNSManagedObjectのためのドキュメントを検索し、objectIDを見ました。しかし、私はこれがそれだとは思わない、それとも?

+1

私はあなたが主キーと言うときオブジェクトIDを参照していると信じています.. http://stackoverflow.com/questions/901640/core-data-primary-key –

答えて

1

Core DataのAPIがSQLと非常に異なるため、Core Dataはこれをサポートしていません。 SQLの観点から考えると、コアデータを必要以上に難しくすることになります。

あなたのコードスニペットのおおよそのコアデータと同等の(スウィフト3の構文を使用して)のようになります。object(with:)を使用して

let objectID = myManagedObject.objectID 

// Later 
let myManagedObject = context.object(with: objectID) 
// Or... 
let myManagedObject = context.existingObject(with: objectID) 

は高速ですが、潜在的に少なく安全です。 existingObject(with:)を使用すると若干遅くなる場合がありますが、より安全です。

関連する問題