2017-03-20 16 views
0

私はコアデータとその中に3つのオブジェクトを持っています。私はオブジェクトがあるとしましょう:Parent, Child, Item。 、Swift Coreデータは2回目のデータを保存できません:Cocoa error 1560

func insert(parent : Parent) { 

    // remove all old Childs 
    parent.removeChild(Parent.childs) 

    for data in datas { 

     let child = self.newChildFromData(data) 

     for data2 in datas2 { 

      let item = self.newItemFromData2(data2) 

      child.addItem(item) 
     } 

     parent.addChild(child) 
    } 

    do { 
     try managedObjectContext.save() 
    } catch { 
     print(error.debugDescription) 
    } 
} 
  • NOTEこれが実際のコードではありません。

    ParentChild

    Parent have one to many relationship with Child 
    Child have one to many relationship with Item 
    
    Parent: 
        - var childs : Set<Child> 
    
    Child: 
        - var items : Set<Item> 
    

    、他の単語と私はメソッドを持っている内部のデータを格納するための、Set<Item>持って、Set<Child>持っていますこの問題を理解するには十分に近いです。

私が初めて(空のデータベース)のためのメソッドを実行すると、それは通常の仕事が、私は二度目のためにそれを実行すると、それは私がそれは何ができるか

The operation couldn’t be completed. (Cocoa error 1560.) 

Error Domain=NSCocoaErrorDomain Code=1560 "(null)" UserInfo={NSDetailedErrors=(
"Error Domain=NSCocoaErrorDomain Code=1570 \"The operation couldn\U2019t be completed. (Cocoa error 1570.)\" UserInfo={NSValidationErrorKey=server, NSLocalizedDescription=The operation couldn\U2019t be completed. (Cocoa error 1570.), NSValidationErrorObject... 

をエラー与えますか?

+0

1560は複数のエラーがあることを意味します。 1570は "NSValidationMissingMandatoryPropertyError"の値です。これは、おそらくあなたが拘束条件を満たしているが、あなたのコードがそれをnilに設定している拘束条件付きのプロパティを持っていることを意味します。 – pbasdf

+0

はい、私はそれについて読んでいますが、最初にメソッドを実行するとエラーなしで要素が格納されますが、同じオブジェクトで2回目にこのエラーが発生したのはなぜですか?私は古い値を取り除くことに何か問題があると思うが、私は何がわからない。 –

+1

すべての子供に親が必要であるという制約がありますか? parent.removeChild(parent.childs)は、Childオブジェクトが親を持たないことを意味します(実際にはChildオブジェクトを削除しません)。 – pbasdf

答えて

0

2つの要件に合わせてコードを変更した後にエラーが発生する場合は、ビルドをクリーニングして、iPhone Simulator/iPhoneデバイスからアプリケーションを削除してください。また、ライブラリを参照することもできます

さらに、Core Data Model Versioning and Data Migration Programming Guideを参照することもできます。コアデータモデルの移行に役立ちます。

+0

はい、アプリケーションを削除してもう一度実行すると機能しますが、データをリロードするコードを実行するとエラーが再び表示されます。これは、モデルのバージョン管理または移行エラーではありません。私は必要に応じてデータをリロードする必要があります。 –

関連する問題