xcode 无法将类型的值分配给 NSSet

Posted

技术标签:

【中文标题】xcode 无法将类型的值分配给 NSSet【英文标题】:xcode cannot assign value of type.. to 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... 行

【问题讨论】:

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

【讨论】:

以上是关于xcode 无法将类型的值分配给 NSSet的主要内容,如果未能解决你的问题,请参考以下文章

Swift 无法将类型“()”的值分配给类型“字符串?”

无法将类型“[PHAsset]”的值分配给类型“UIImageView!”

无法将类型“AppDelegate”的值分配给类型“CLLocationManagerDelegate?”

无法将类型“类”的值分配给类型“[类]”

无法将“颜色”类型的值分配给“UIColor”类型

无法将类型 [NSObject] 的值分配给类型 NSObject