【问题标题】:xcode cannot assign value of type.. to NSSetxcode 无法将类型的值分配给 NSSet
【发布时间】:2017-10-25 01:53:57
【问题描述】:

我正在使用 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?

}

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

【问题讨论】:

  • 不知道为什么不显示图片
  • 请将源代码作为文本和错误添加到问题中。确保包含您正在使用的与错误相关的所有自定义类型。
  • 将您的代码发布为文本而不是图像。这样人们就可以更轻松地测试您的代码。
  • 对不起,我是 stackoverflow 的新手,所以看起来有点乱

标签: swift core-data


【解决方案1】:

当您将 CoreData 模型上的关系设置为 To Many 时,它开始表现得像一个数组。就像这样,您需要将数据附加到该数组而不是为其分配一个类。你可以这样做:

.addingObjects(from: [Any])

【讨论】:

    【解决方案2】:

    我不是要求任何人解决这个错误,我只是想知道是什么 错误告诉我要这样做。

    据我了解,toStore 是 CoreData 中从ItemStore 实体的to many 关系。

    现在,既然您只需要知道错误,如果我是正确的并且关系正好在上面,那么这意味着 Item 实体有一个 set 与之关联的商店而不是一个 Store ,因此你得到这个错误

    错误:无法将“Store”类型的值赋给 NSSet 类型的值?

    【讨论】:

      【解决方案3】:

      问题是您的实体具有一对多的关系,如果您想解决此问题,请尝试将其更改为“一对多”。我知道您不想要答案,但这里是有关如何解决此问题的提示。如果您转到 *.xcdatamodeld 文件并找到您的 Item 实体,您可以看到属性关系...找到合适的关系并将其从“to-many”修改为“to-one”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-30
        • 2019-12-03
        相关资源
        最近更新 更多