2011-10-23 13 views
3

私はCore Dataを使用したiPhoneアプリを持っていますが、特定のエンティティに固有の一意の識別子を特定できないようです。状況は次のとおりです。iOSコアデータオブジェクトの一意の識別子?

私はプロフィールエンティティを持ち、他のエンティティとの関係を持っています。アプリの開始時に、ユーザーが「サインイン」するプロファイルを選択します。私はアプリケーションの使用を通してその特定のプロファイルを追跡する必要があるので、適切な関連オブジェクトを取得できます。

私は通常のSQLデータベースを使用していた場合、私はちょうどApp DelegateのプロパティとしてprofileID(プライマリキー)を保存します。しかし、コアデータには、主キーはありません。

私は管理対象オブジェクトobjectIDがあると知っていますが、私が読んだところから変更することができます(ユーザーはアプリを使用している間にプロファイル情報を変更できます。つまり、フェッチしてから再保存する必要があります)。私が気づいていないこのような状況に対処するベストプラクティスはありますか?

+0

ユーザーがプロファイル情報を変更した場合、既存の管理対象オブジェクトを再保存するのではなく、更新するべきですか? – millimoose

答えて

1

再保存では、オブジェクトを再作成(=コピー)して保存するときを除いて、一意のobjectIDは変更されません。そうでない場合は一意のIDは無意味です。

これがそうである場合は、いつでも独自のIDフィールドを持つことができます。これは、プロファイルが初めて作成されたときにobjectIDで埋め込むことができます。あなたが自分でそれを変更しなければ、そのフィールドは決して変わることはありません:-)。

7

user1007895、

永久objectIDを持続するためのメカニズムがあります。 -[NSManagedObjectID URIRepresentation]および-[NSPersistentStoreCoordinator managedObjectIDForURIRepresentation:]。これらは変わらないことが保証されています。

Andrew

+4

このURIを管理対象オブジェクトから取得する方法を知りたい人は、 'object.objectID.URIRepresentation'のようにします。 –

+2

対応する管理対象オブジェクトがまだ保存されていない場合、オブジェクトID(したがってURI)は対応する管理オブジェクトが保存されるときに変更される一時的な値であることに注意してください。 –

+0

=>上記の答えは間違っています。 URIRepresentationは決して変更されないことが保証されていないため、オブジェクトが保存されるときに変更されます。 – Martin

関連する問題