データモデルの属性のオプション

データモデルの属性を作成する際に、以下のオプションを設定することができます。これらを試してみたので、メモしておきます。

  • Optional: チェックをすると必須項目でなくなる
  • Transient: ファイルに書き込まない
  • Indexed: 検索のインデックスを作成する

まずOptionalですが、チェックをしないと必須項目になります。これのチェックの有無によって、validate系のメソッドも変化します。

例)Entity.nameは必須

```NSError *e;
NSLog(@"canInsert: %@", [entity validateForInsert:&e] ? @"YES" : @"NO"); # NO
entity.name = @"Name";
NSLog(@"canInsert: %@", [entity validateForInsert:&e] ? @"YES" : @"NO"); # YES

<pre><code><br />例)Entity.nameは必須でない

```NSError *e;
NSLog(@"canInsert: %@", [entity validateForInsert:&e] ? @"YES" : @"NO"); # YES
entity.name = @"Name";
NSLog(@"canInsert: %@", [entity validateForInsert:&e] ? @"YES" : @"NO"); # YES

次にTransientですが、これにチェックが入っている属性はメモリ上の一時的な値になり、ファイルには書き込まれなくなります。Javaにtransientというシリアライズの対象外になる修飾子がありますが、あれと意味的には同じ感じだと思います。

最後にIndexedですが、これは検索のインデックスを作成して、速度向上が望めるらしいです。ただし、当然、エンティティの保存の際にはインデックスを構築し直す(と思います)ので、そのパフォーマンスは落ちると思います。実際にどの程度パフォーマンスが向上するかは計測していないです。もし、今後アプリの速度が気になりはじめたら検証することにします。

この記事が役に立った場合、シェアしていただけると励みになります!!