2017-01-02 5 views
5

Xcode8/iOS10/macOS Sierraを使用して数ヶ月間コーディングを中断し、CoreDataの変更を発見しました。Objective CプロジェクトをXcode 8コアデータ用に更新する正しい方法NSManagedObjectサブクラスの変更

私はObjective Cの新しいNSManagedObjectサブクラス世代について頭を尽くそうとしていましたが、ウェブ上にはほとんどアウトがありません。私は私が私のプロジェクトを解体して、物事をめちゃくちゃに完全けど最初に起動する前に、そこに他の人アウトに役に立つかもしれない、私は周りのを突っついから発見したいくつかのことを明確化する必要があるいくつかのものを持っている...

ものare

自動的に生成されたファイルは、DerivedDataフォルダに深く埋め込まれています。 USER-> Library-> Developer-> Xcode-> DerivedData-> ProjectName-lotsOfRandomLetters-> Buildを開き、DerivedSources-> CoreDataGeneratedが見つかるまでフォルダを開いたままにしておきます。

自動的に生成されたファイルは、プロジェクトフォルダまたはナビゲータに表示されませんが、エラーがある場合は、Xcodeによってソースが表示されます。マニュアル/なし、クラス定義、およびカテゴリ/拡張 -

物事Xcodeは

3つのコード生成の設定がありますが生成されます。

エンティティはcodegenをEditorのを使用してNSmanagedObjectサブクラスを作成する(古い動作でした)マニュアル/ noneに設定されている> NSManagedObjectサブクラスは、プロジェクト内の4つのファイルを生成します作成...

エンティティ+ CoreDataClass.hそして、エンティティ+ CoreDataClass.mと エンティティ+ CoreDataProperties.hとエンティティ+ CoreDataProperties.m

(以前のバージョンのXcode 7はEntity.h、Entity.m、 エンティティ+ CoreDataProperties.hとエンティティ+ CoreDataProperties.mファイルを生成しました)

e ntityのcodegenがClass Definitionに設定されている場合、Xcodeはこれらの4つのファイルをプロジェクトではなく派生データフォルダに自動的に生成します。これらのファイルには、変更しないようにコメントが表示されます。

エンティティcodegenがカテゴリ/拡張に設定されている場合、Xcodeは2つのファイルを生成します。これらのファイルには、変更しないことを示すコメントが付けられています。これらは...

エンティティ+ CoreDataProperties.hとエンティティ+ CoreDataProperties.m

これらの2ファイルがプロジェクトになるようにEntity.hファイルを期待しているされており、不在ならばXcodeでエラーが表示されます。 Xcode内でこれらのファイルのいずれかのソースを見ることができるのはこれだけです。

これらのファイルに

+ CoreDataPropertiesファイルはXcodeののものを生成し、以前のバージョンと同じように見えるいただきましたが1件の追加を除いたファイルを生成しました。それらには、エンティティ/ NSmanagedObjectのすべての属性/プロパティと、1対多または多対多の関係を持つエンティティを処理するメソッドが含まれています。新しい追加はNSmanageObjectの新しいfetchRequestメソッドをサブクラス化するfetchRequestのメソッドです。

質問

1)は、今では自動的にファイルを更新してあなたは、NSManagedObjectのサブクラスに追加する余分な性質/機能を持っていないコード生成のための明白かつ最良の選択クラス定義です(cmd-sでプロジェクトを保存するとき)?

2)+ CoreDataClassを使用したファイルの名前付けは、クラスのカテゴリの規則に従います。これは、これを拡張子にするクラスが必要であることを意味します。

私は、Entity + CoreDateClass .h/mファイルが古いEntity.h/mファイルをまっすぐに置き換えていると仮定していますか?ファイル名にもかかわらず、実際にはカテゴリではないのでしょうか?

3)新しいNSManagedObjectサブクラスについては、Entity.hではなくEntity + CoreDataClass.hをインポートする必要がありますか?

4)私はNSManagedObjectのサブクラスファイルのほとんどを除去することによって、自分のプロジェクトを整理整頓したい場合は、私はちょうどXcodeでファイルを削除し、クラス定義や...

にcodegenをエンティティを設定するのですが下の魔法があります#import entity.hを試すときエンティティ+ CoreDataClassを探すフード、または#import entity.hへのすべての参照を見つけて#import entity + CoreDataClass.hに変更する必要がありますか?

5)私は、NSManagedObjectサブクラスでプロパティとメソッドを追加したい場合は、codegenをCategory/Extensionに設定する必要があると仮定しますか?

6)カテゴリ/エクステンションを選択した場合、独自のNSmanagedObjectサブクラスファイルを作成する必要があります。そのentity.hはentity + CoreDataClass.hではありませんか?

7)entity + CoreDataClass.hがentity.hファイルの新しい受け入れられた命名形式である場合、生成されたCategory/Extensionファイルは、エンティティ+ CoreDataClass.hファイルの代わりにプレーンなentity.h名前ファイルを探すのはなぜですか?これはちょうど私が知るべきである何かを逃しているか、私が受け入れるべきであるか何かのApplesの部分にちょうど矛盾ですか?

ありがとうございます。

+0

答えのいくつか、対応するWWDCビデオ[ここ](http://stackoverflow.com/a/39933534/1457385)へのリンクを検索してください。 – shallowThought

答えて

2

大丈夫 - かなり多くの人が見て答えていないので、私は自分自身を試して答えます。

1)はい - CoreDataエンティティに追加のプロパティ/機能を追加する必要がない場合は、クラス定義に進みます。これにより、 Entity + CoreDataClass.hとEntity + CoreDataClass.m、Entity + CoreDataProperties.hおよびEntity + CoreDataProperties.mの4つのファイルが作成されますが、派生データフォルダーの内側から隠されているため、これらのファイルは表示されません。属性名をチェックする必要がある場合、これらのファイルにアクセスできないので、コアデータエディタを見ることができます。

2)Entity + CoreDateClass .h/mファイルは、古いEntity.h/mファイルの代わりになります。カテゴリのファイル命名規則を使用しているにもかかわらず、それらはカテゴリではありません.Appleの命名システムがあなたを混乱させないようにします。ファイル内部を調べると、クラスはEntity + Entity + CoreDataClassとして定義されます。

3)新しいNSManagedObjectサブクラス( 'Class Definition'オプションで自動生成)では、Entity.hではなくEntity + CoreDataClass.hをインポートします。結局のところ、内部で定義されたクラスではなく、インポートするファイルです。クラスを使用するときにエンティティではなくEntity + ...

4)あなたのプロジェクトをdeclutterすることにした場合、NSManagedObjectサブクラスファイルを削除してエンティティcodegenを 'Class Definition'に切り替えることによって、プロジェクトを通過し、それらを参照するすべてのインポートステートメントを変更する必要があります+ CoreDataClassをファイル名に追加します。幸運にも、Xcodeのような大したことではなく、エラーとしてそれらのすべてを表示するので、簡単に見つけることができます。

5)はい - NSManagedObjectサブクラスにプロパティまたは機能を追加する場合は、codegenの "Category/Extension"オプションを使用します。

6)カテゴリ/エクステンションを選択する場合は、独自のNSmanagedObjectサブクラスファイルを作成する必要があります。名前をEntity.hとします。自動生成されたEntity + CoreDataProperty.hがEntity.hファイルをインポートするため、Entity + CoreDataClass.hという名前を付けないでください。

7)はい、これはApple側の名前の不一致です。それが私のようにあなたを捨てさせないでください。

そして、あなたはコード生成を使用してのルートを下る場合は最終的には、...

を忘れてはいけない - >カテゴリ/拡張、あなたはエンティティへの追加の関係を追加した場合、あなたはあなたのエンティティを更新する必要があります.hファイル。たとえば、CarというNSManagedObjectサブクラスに関係を追加した場合は、@Class Car;をEntity.hに追加する必要があります。

関連する問題