Recordというcoredataエンティティがあり、プロパティdateUpdatedがあります。生成されたNSManagedObjectサブクラスにはオプションのマーク(?)がないことに気付きました
CoreData Editor:
生成されたサブクラス:
予想:
PDATED:これは退屈です。サブクラスを再生成するたびに、すべてのオプション値を手動で更新する必要があるためです。サブクラスに非オプション(「?」なし)があると、以下の例のように、割り当てる前にevalueをチェックすることになります。
// sample value:
// serverDateFormatter = "yyyy/MM/dd"
// dateString = ""
// Branch is a subclass of Record (see above images)
var date = self.coreData.serverDateFormatter.dateFromString(dateString)
if date != nil
{
branch.dateUpdated = date
}
しかし、xcodeが(?)を使用してサブクラスのオプション値を自動的に設定できる場合、次のようにするだけです。
branch.dateUpdated = self.coreData.serverUTCDateFormatter.dateFromString(dateString)
私の場合、手動でオプションとしてマークする必要があるプロパティがたくさんあります。
Core Data Model Editorのオプションのチェックボックスは、Swiftおよびそのオプションが導入される前に存在していました。Appleは、その Core Dataプログラミングガイド :
属性がオプションであることを指定できます。つまり、値を持つ必要はありません。ただし、一般的には、特に数値の場合はそうすることはお勧めしません(通常、モデルではデフォルト値の必須属性を使用すると、0の結果が得られます)。これは、SQLには、Objective-Cのnilとは異なるNULLの特別な比較動作があるためです。データベースのNULLは0とは異なり、0の検索はNULLの列と一致しません。
したがって、SwiftおよびXcode 8を使用すると、オプションのチェックボックスは、プロパティをオプションとして定義した、または管理対象オブジェクトのサブクラスでは定義しなかったという事実とはまだ関係ありません。 Editor>Createを使用してサブクラスプロパティを作成するときに、NSManagedObject
サブクラスプロパティのオプションタイプに影響を与えますNSManagedObjectサブクラス。
つまり、モデルエディターでオプションのチェックボックスをオンにするプロパティが必要になるたびに、すぐにそのNSManagedObject
サブクラス宣言をオプションとして配置します。
Mogenerator は、Data Model Inspectorでエンティティの属性ごとにこのオプションを変更し、プロジェクトを再ビルドするたびに、NSManagedObject
サブクラスプロパティを非オプションからオプションに自動的に切り替えることができます。
はい、これはバグ/制限のようです。この問題を回避するには、非スカラー型を使用してください。
SwiftコードはObjective-Cに変換され、Objective-Cは非クラス型のnil値をサポートしません。