5

CoreData を使用する場合、ID 属性を作成して各レコードに何らかの一意のキーを持たせる必要がありますか?それとも、テーブルの各行ごとにデータベース ID フィールドにアクセスできますか?

DB ID フィールドを使用する方法がある場合は、managedObject インスタンスを介してレコードを保存するときにアクセスする方法について、いくつかの指示をいただければ幸いです...

4

3 に答える 3

6

すべてのオブジェクトにはオブジェクト ID (NSManagedObjectID) があるため、通常は id 属性を作成する必要はありません。管理対象オブジェクトがある場合は、オブジェクトに -objectID を送信して ID を取得します。ただし、キャッチがあります。

問題があります。NSManagedObjectID は、一時的または永続的のいずれかになります。オブジェクトが作成されると、そのオブジェクトの永続 ID を取得するまで一時 ID が割り当てられます。オブジェクトを永続化すると、Core Data は、まだ一時 ID を持つ各オブジェクトの永続 ID を自動的に取得します。

カスタム ID 属性が必要な場合は、エンティティごとに個別に作成する必要があります。ID 属性を持つ抽象エンティティを作成しないでください。これを行うと、Core Data は、抽象エンティティから継承するすべてのエンティティに対して巨大な (モンスター) テーブルを作成します。これは悪いです。

于 2013-10-08T13:17:15.070 に答える
3

NSManagedObjects には object id プロパティがあります。ただし、ManagedObject を作成すると一時的な ID が存在し、オブジェクトを DB に格納した後、永続的な ID が取得されます。私の経験では、データごとに独自の ID を作成することをお勧めします。たとえば、単純なテーブルの場合は、単純にタイムスタンプを一意の ID として使用できます。また、ライブで頻繁に更新される複雑なテーブルの場合は、テーブル内のフィールドとタイム スタンプの組み合わせを使用する必要があります (値を次のように変換できます)。 base64 を使用して実際の ID にする ;) )。

于 2013-10-09T08:09:50.323 に答える
2

Apple は、Core Data によって作成された SQLite ファイルにアクセスしないことをお勧めします。これは、その形式が将来変更される可能性があるためです。この規則に従って、独自の ID を作成する必要があります。

NSManagedObject - objectIDもありますが、ユースケースは何か、使用する必要があるかどうかはわかりません。

于 2013-10-08T10:48:21.023 に答える