ObjecTips

Swift & Objective-C で iOS とか macOS とか

Xcode 11 Core Data の変更点

こっちの記事の派生で Core Data の更新箇所だけ切り出し

koze.hatenablog.jp

Core Data

Default Value オプション
  • Core Data のモデルの String attribute で Default Value の項目が空の場合に Null String を使うか Empty String "" を使うかのチェックボックスオプションが付いた

Xcode 10 では Attribute の Optional 設定のオンオフに関わらず、デフォルト値の設定が空の場合はモデルの生成時に自動で初期値に Empty String が入る仕様になっている。
Xcode 11 ではデフォルト値の設定が空の場合、新しいオプション設定に基づいて初期値に Null String か Empty Stirng が設定される。

ただし試してみたところ、Attribute 設定を Non Optional にして、Default Value を Null String にした場合、モデルの初期化後に何も値を設定しないままDBを保存するとクラッシュしてしまうので、初期値が Null String の場合は Attribute の Optional を強制にしてしまう方が良いのではないかと思った。
ここはまだ初期βなのでフィードバックの余地有り。

なお、Core Data にはモデルクラスの自動コード生成の機能があって、Attribute が Optional かどうかに関わらず Swift 上では以下の様な Optional なプロパティのコードが生成されてしまうため、プロパティに nil を入れて保存するとクラッシュというややこしい事になってしまっている。

extension Event {
    @NSManaged public var title: String?
}

これも生成されるモデルのコードはDBのモデルと揃う様にフィードバックした方が良いと思う。
(Miguration まで考えるとなかなか大変そうではある)

CloudKit
  • Core Data の Configuration に CloudKit を使うかどうかのオプションが付いた

Xcode 11, iOS 13 の Core Data の大きなトピックに CloudKit の同期サポートがある。
詳しくは以下

Using Core Data With CloudKit - WWDC 2019 - Videos - Apple Developer

CloudKit を利用するにチェックを入れるとデフォルト値の設定が必須になったりモデルに変更が必要になるが、おそらく Lightweight Migration 可能(Migration の実装不要)な範囲の変更になると思う。