2016-10-30 50 views
0

這是我第一次發佈問題。我認爲在我的第一篇文章中,我沒有說清楚,我真正需要知道的是如何讓用戶將對象分配給與其相關的其他對象。目前的這個選擇並存儲來自桌面視圖的核心數據關係

contract.wageClass = wageClassIDLabel.text 

變化給錯誤的變化「不能分配型‘字符串’的價值型‘的NSSet’。

我有兩個核心數據實體,合同和WageClass,兩者的關係是-many(合同可以有很多工資類別,工資類別可以屬於多個合同)我沒有問題允許用戶添加到工資類別和合同的商店,我只是無法弄清楚如何允許用戶選擇實際的關聯數據

注意:我用編輯器 - >創建NSMangedObject的子類而不是Codegen我可以看到並編輯這些類。

這是用戶輸入的數據來創建一個工資類視圖控制器:

import UIKit 

class AddWCViewController: UIViewController { 


    @IBOutlet weak var nameField: UITextField! 

    @IBOutlet weak var numberOfWorkersField: UITextField! 


    @IBOutlet weak var wagePerHourField: UITextField! 



    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 
    } 

    @IBAction func submitButtonTapped(_ sender: AnyObject) { 



     let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 

     let wageClass = WageClass(context: context) 

     wageClass.name = nameField.text! 
     wageClass.numberOfWorkers = (numberOfWorkersField.text! as NSString).doubleValue 
     let numWorkers = wageClass.numberOfWorkers 
     wageClass.wagesPerHour = (wagePerHourField.text! as NSString).doubleValue 
     let classPerHour = wageClass.wagesPerHour 
     wageClass.classTotalWagesPerHour = numWorkers * classPerHour 






     //Save it 

     (UIApplication.shared.delegate as! AppDelegate).saveContext() 
     navigationController?.popViewController(animated: true) 



    } 
} 

我知道我需要使用類擴展addToContract但我怎麼讓用戶選擇通過合同UI?我如何讓用戶選擇多個合同?

更新

我加了一個實現代碼如下並將其設置爲允許在編輯多個選擇。現在我正在尋找一種方法來保存選擇。

import UIKit 

class SelectWCTableViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 


    @IBOutlet var selectTableView: UITableView! 



    var wageClasses: [WageClass] = [] 






    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     selectTableView.dataSource = self 
     selectTableView.delegate = self 
     selectTableView.allowsMultipleSelectionDuringEditing = true 
     selectTableView.setEditing(true, animated: false) 



    } 

    override func viewWillAppear(_ animated: Bool) { 
     //get data from Core Data 
     getData() 



     //reload tableview 

     selectTableView.reloadData() 

    } 



    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return wageClasses.count 
    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = UITableViewCell(style: .subtitle, reuseIdentifier: "ElementCell") 

     let wageClass = wageClasses[indexPath.row] 

     cell.textLabel?.text = "\(wageClass.name!)" 

     cell.detailTextLabel?.text = "\(wageClass.numberOfWorkers) workers @\(wageClass.wagesPerHour)/per hour =\(wageClass.classTotalWagesPerHour) total paid" 

     return cell 
    } 



    func getData() { 
     let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 
     do { 
      wageClasses = try context.fetch(WageClass.fetchRequest()) 



      //   var totalWagesPaidPerClass = 0 
      //   for wageClass in wageClasses { 
      //    let people = wageClass.valueForKey("numberOfWorkers") as! Int 
      //    let hours = wageClass.valueForKey("wagePerHour") as! Int 
      //    totalWagesPaidPerClass += people * hours 
      //   } 



     } 
     catch { 
      print("Fetching Failed") 
     } 

    } 



} 

回答

0

您是否構建了核心數據模型中兩個實體之間的關係?

如果不遵循此link來創建2個實體之間的關係。這樣你就可以訪問wageClass.contractscontracts.wageClasses

核心數據不會爲您構建UI。核心數據僅用於數據持久性。你必須自己構建UI。

+0

感謝您的回答,但我的問題是關於如何讓用戶通過UI選擇合同。 – camelCaseUpInYourFace

+0

你問用戶界面應該是什麼樣子?或者應該如何實現UI? – user1046037

+0

應該如何實現UI。 UIPickerView?你如何一次選擇多個? – camelCaseUpInYourFace