web-dev-qa-db-ja.com

Swift + CoreData:生成されたNSManagedObjectサブクラスにオプションの属性を自動的に設定できません

Recordというcoredataエンティティがあり、プロパティdateUpdatedがあります。生成されたNSManagedObjectサブクラスにはオプションのマーク(?)がないことに気付きました

CoreData Editor:

enter image description here

生成されたサブクラス:

enter image description here

予想:

enter image description here

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)

私の場合、手動でオプションとしてマークする必要があるプロパティがたくさんあります。

43

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サブクラスプロパティを非オプションからオプションに自動的に切り替えることができます。

45
Imanou Petit

回避策:

はい、これはバグ/制限のようです。この問題を回避するには、非スカラー型を使用してください。

オプション属性

  • オプションのチェックボックスをオンにします
  • スカラーチェックボックスをオフにします

非オプションの属性

  • オプションのチェックボックスをオフにします
  • スカラーチェックボックスをチェック

考えられる理由:

SwiftコードはObjective-Cに変換され、Objective-Cは非クラス型のnil値をサポートしません。

9
user1046037