xcode 无法将 type.. 的值分配给 NSSet

His*_*lik 4 core-data swift

我正在使用 Swift 3 开发 CoreData,现在快完成了。我创建了 CoreData 实体,现在我尝试从应用程序上的表单保存数据,但收到此错误:

  import UIKit
  import CoreData

  class ItemDetailsVC: UIViewController, UIPickerViewDelegate,          UIPickerViewDataSource  {

@IBOutlet weak var storePicker: UIPickerView!
@IBOutlet weak var titleField: CustomTextField!
@IBOutlet weak var priceField: CustomTextField!
@IBOutlet weak var detailsField: CustomTextField!

var stores = [Store]()


override func viewDidLoad() {
    super.viewDidLoad()

    storePicker.delegate = self
    storePicker.dataSource = self



func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {

    let store = stores[row]
    return store.name
}

func numberOfComponents(in pickerView: UIPickerView) -> Int {

    return 1
}

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

    return stores.count
}

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

    // update
}

func getStores() {
    let fetchRequest: NSFetchRequest<Store> = Store.fetchRequest()

    do {
        self.stores = try context.fetch(fetchRequest)
        self.storePicker.reloadAllComponents()

    } catch {
        // some code
    }

}

@IBAction func savePressed(_ sender: UIButton) {

    let item = Item(context: context)

    if let title = titleField.text {
        item.title = title
    }

    if let price = priceField.text {
        item.price = (price as NSString).doubleValue
    }

    if let details = detailsField.text {
        item.details = details
    }

   item.toStore = stores[storePicker.selectedRow(inComponent: 0)] error:    cannot assign value of type 'Store' to value of type NSSet?

}
Run Code Online (Sandbox Code Playgroud)

我不是要求任何人解决该错误,我只是想知道该错误告诉我要做什么。错误出现在 item.toStore =stores[storePicker... 行上

小智 6

当您将 CoreData 模型上的关系设置为“To Many”时,它开始表现得像一个数组。就像这样,您需要将数据附加到该数组,而不是为其分配一个类。您可以通过以下方式执行此操作:

.addingObjects(from: [Any])
Run Code Online (Sandbox Code Playgroud)