2017-12-24 27 views
0

私は2つのエンティティを1つの顧客とし、他のケースは1対多の顧客であり、1つの顧客は多くのケースを持ち、関係名はtoCustomers顧客エンティティ私は、保存ボタンでデータを挿入するときに1対多の関係でカテゴリに項目を接続する方法

var CustmerNameForAddNewCaseVar: Customers? 
CustomerNameLbl.text = CustmerNameForAddNewCaseVar?.name 

のUIViewController追加例にセグエによって選択された顧客名を渡す私のコードでのよう

let newCase : Cases! 
    newCase = Cases(context:context) 
    newCase.caseName = caseNameTextField.text 
    newCase.toCustomers = CustmerNameForAddNewCaseVar?.name // here i got error ... Cannot assign value of type 'String?' to type 'Customers?' 
    do{ 
     AppDel.saveContext() 
}catch{ 
     print(error) 
    } 

はあなた

を感謝任意のヘルプライン「newCase.toCustomers」は変更されている

let newCase : Cases! 
newCase = Cases(context:context) 
newCase.caseName = caseNameTextField.text 
newCase.toCustomers = CustmerNameForAddNewCaseVar 
do { 
    // Save Context 
} catch { 
    // Handle Error 
} 

お知らせ:

+0

すべてのエンティティに複数の名前が付いている場合、モデルを理解するのは非常に混乱します。 'toCustomers'は1つのケースか多くのケースですか?それ以外は 'Customer(s)'インスタンス(名前ではない)を関係に割り当てる必要があります。ところで、それはまさにエラーメッセージが言っていることです。 – vadian

+0

toCustomersは関係の名前であり、Customersはエンティティであるため、Customersから継承した変数をコードに挿入した名前を読むことができます。新しいケースを思い出したときに顧客名に割り当てる必要がありますだから私はこれを好きなのですが、Relationship名に顧客名を挿入して、多くのケースが1つの顧客に属するようにしたいのですが、顧客名である文字列をエンティティからコンポジション名toCustomer考えてください – Mahmoud

+0

関係は常に**エンティティ**の属性ではありません。命名に関して:let newCase:Casesは変数が単数であるが実体が複数であるため、矛盾している。エンティティ 'Case'と' Customer'と 'toCustomer'という名前を、** one **' Customer'であると仮定して名前を付けます。しかし、*対多*関係の名前は 'cases'です。 'Case'型のアイテムが** **たくさんあるはずですから。また、「[Cases]」という宣言は、同形(複数の二重)です。 – vadian

答えて

0

はあなたの例を使用するには...あなたはこれと一致するようにコードを変更するであろう。

あなたの質問にコメントの中で他に提案しているのは、エンティティと変数の名前を明確にして、使い方を明確にすることです。たとえば、次のようになります。

import UIKit 
import CoreData 

class Customer: NSManagedObject { 
    @NSManaged var cases: Set<Case>? 
} 

class Case: NSManagedObject { 
    @NSManaged var customer: Customer? 
    @NSManaged var name: String? 
} 

class ViewController: UIViewController { 

    var customer: Customer? 
    var context: NSManagedObjectContext? 

    @IBOutlet weak var caseName: UITextField? 

    @IBAction func didTapSave(_ sender: UIButton) { 
     guard let context = self.context else { 
      return 
     } 

     guard let customer = self.customer else { 
      return 
     } 

     let newCase = Case(context: context) 
     newCase.name = caseName?.text 
     newCase.customer = customer 

     do { 
      try context.save() 
     } catch { 
      // Handle Error 
     } 
    } 
} 
+0

あなたの答えをありがとう、私はすでにそれがnewCase.toCustomers = CustmerNameForAddNewCaseVarを使用しないと見つけました。名前とコアデータはすべて私のために行いますが、私はあなたにもそれを見いだすことができますので、あなたの答えと、あなたの時間を読んで、私の質問に答えてくれてありがとう:-) – Mahmoud