2016-06-22 19 views
8

Xcode 8ベータ1のコアデータに問題があります。古いアプリケーションはコンパイルされて正常に動作しますが、新しいアプリケーションはすべてコンパイルされ、新しいNSManagedObject。コアデータモデルはアプリケーションに反映されていないようです

最初は、古いxcdatamodelを間違って削除して別のものを作り直すことと関係があると思っていましたが、新しいアプリを作って単純なエンティティ "A"を作成した後、クラスAのオブジェクトをランタイム。

私はエラーを返しlet a = A(context: myMOC)使用して試してみました:私はすべてを綴られていることを確認するために数十回

Could not cast value of type 'NSManagedObject_A_' (0x7fd114626f80) to 'MyApp.A' (0x10d2fdf28).

私がチェックしている私のxcdatamodel:古いlet a = NSEntityDescription.insertNewObject(forEntityName: "A", into: context) as! Aをしようと

An NSManagedObject of class 'MyApp.A' must have a valid NSEntityDescription.

はエラーを返します。 CDをセットアップする際に間違いがないことを確認するためにテストするための新しいプロジェクトを作成しました。思考?

UPDATE:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="11147.23" systemVersion="16A201w" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier=""> 
    <entity name="Coordinate" syncable="YES" codeGenerationType="class"> 
     <attribute name="latitude" optional="YES" attributeType="Double" defaultValueString="0.0" usesScalarValueType="YES" syncable="YES"/> 
     <attribute name="longitude" optional="YES" attributeType="Double" defaultValueString="0.0" usesScalarValueType="YES" syncable="YES"/> 
     <relationship name="route" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="Route" inverseName="coordinates" inverseEntity="Route" syncable="YES"/> 
    </entity> 
    <entity name="Route" syncable="YES" codeGenerationType="class"> 
     <attribute name="uuid" optional="YES" attributeType="String" syncable="YES"/> 
     <relationship name="coordinates" optional="YES" toMany="YES" deletionRule="Nullify" ordered="YES" destinationEntity="Coordinate" inverseName="route" inverseEntity="Coordinate" syncable="YES"/> 
    </entity> 
    <elements> 
     <element name="Route" positionX="-45" positionY="0" width="128" height="75"/> 
     <element name="Coordinate" positionX="-18" positionY="27" width="128" height="90"/> 
    </elements> 
</model> 

UPDATE 2: xcdatamodelパッケージの内容は、このですmanagedObjectModelの実体を印刷、正しいモデルがロードされていることを示しています。まだ私は新しいプロジェクトで初期化するNSManagedObjectを取得できません。

+0

あなたがリストした2番目のエラーは、カスタムクラス名/モジュールがデータモデルで正しく記入されていないと思います。彼らが正しいことを確認しましたか? –

+0

私は複数回確認しました。私は持っているすべてのエンティティをテストして、同じエラーを取得します。 – jjatie

+0

データモデルのXMLの内容をQに追加してください。xcdatamodelパッケージ内にあります。または、モデルエディタのスクリーンショットを追加します。 –

答えて

14

私はついにそれを考え出し:

をXcodeの7では、クラス名を入力し、スウィフトに、「現在のプロジェクトモジュール」にモジュールを設定する必要があります。ソースファイルを自動的に生成するので、Xcode 8ではこれ以上必要ではないと想定しました。 Xcodeで@objc(ClassName)が生成されるようにするには、手動でクラス名を生成クラスの名前に設定する必要があります(手動で作成されたCoreDataエンティティのクラスは、私には必要ありません。また、Xcodeが生成されたクラスをもう見つけられないため、モジュールを手動で設定しないでください。

enter image description here

+0

ありがとう!私は数日間離れています。家に帰って答えを受け入れると、私はそれをテストします。 – jjatie

+5

私は同じ問題を持っていました。***キャッチされていない例外 'NSInvalidArgumentException'のためアプリを終了していました。理由: 'クラス' MyAp.MyClass 'のNSManagedObjectに有効なNSEntityDescriptionが必要です。' '@objc(MyClass ) 'を私の管理オブジェクトクラスの先頭に追加します。 – masters3d

+0

同じことがmasters3dと同じように働いていました。あなたはクラスMyClassを書く前に@objc(MyClass)を置く:NSManagedObject {// ...}そして問題はなくなった – horseshoe7

1

私は同じエラーがありました。私の場合は、SwiftクラスをObjectiveCランタイムに公開する必要がありました。これを行うには、次のように、スウィフトクラス宣言の前に@objc(ModelClass)を追加します。

@objc(Player) 
class Player: NSManagedObject { 
} 
0

はAppDelegateでNSPersistentContainer名を修正私のために働きました。

関連する問題