尝试保存数组,出现错误 - 无法将类型“[Data]”的值转换为预期的参数类型“[Dictionary<String, AnyObject>]”

Posted

技术标签:

【中文标题】尝试保存数组,出现错误 - 无法将类型“[Data]”的值转换为预期的参数类型“[Dictionary<String, AnyObject>]”【英文标题】:Trying to saveArray, got error - Cannot convert value of type '[Data]' to expected argument type '[Dictionary<String, AnyObject>]' 【发布时间】:2019-02-15 02:47:37 【问题描述】:

我正在尝试使用此函数保存从 tableview 添加的数组:

class func saveArray(_ value: [Dictionary<String, AnyObject>], key: String) 
        let data = NSKeyedArchiver.archivedData(withRootObject: value)
        UserDefaults.standard.set(data, forKey: key)
    

下面是我要保存数组的函数:

func addItemCat(items: [Data]) 
        print("ITEM: ", items)
        dataSource.myListTableViewController.myListArr = items
        self.myListTV.isHidden = false
        UserDefaultsHelper.saveArray(items, key: Constants.myList.myList)
    

但是,我收到此错误:无法将类型“[Data]”的值转换为预期的参数类型“[Dictionary String, AnyObject]”

以下是我的数据模型: data model screencap

我是 Swift 新手,希望有人能解释一下问题所在。

【问题讨论】:

saveArray 具有字典数组[Dictionary&lt;String, AnyObject&gt;] 的参数类型,但是您传递的是数据数组[Data],显然它不起作用,尝试将[Dictionary&lt;String, AnyObject&gt;] 更改为[Data] @Tj3n,我改了,还是一样的错误 【参考方案1】:

问题在于数据类型,saveArray 函数需要字典 [Dictionary&lt;String, AnyObject&gt;] 的类型数组的值参数,但您传递的数据模型对象数组是类型不匹配错误。

解决这个问题:

首先,您不应使用预定义的关键字来创建自定义对象。请改用DataObject

struct DataObject 


现在将您的 saveArray 函数更改为:

class func saveArray(_ value: [DataObject], key: String) 
    let data = NSKeyedArchiver.archivedData(withRootObject: value)
    UserDefaults.standard.set(data, forKey: key)

addItemCat,作用为:

func addItemCat(items: [DataObject]) 
    print("ITEM: ", items)
    dataSource.myListTableViewController.myListArr = items
    self.myListTV.isHidden = false
    UserDefaultsHelper.saveArray(items, key: Constants.myList.myList)

【讨论】:

感谢@ankitjayaswal 的解释,非常感谢 :)

以上是关于尝试保存数组,出现错误 - 无法将类型“[Data]”的值转换为预期的参数类型“[Dictionary<String, AnyObject>]”的主要内容,如果未能解决你的问题,请参考以下文章

错误:无法将 [anyobject] 转换为强制类型数组<_>

“数组到字符串的转换”错误 Laravel - 尝试将数组保存到数据库

将 google 对象保存到 Core Data - 以 NSException 错误类型的未捕获异常终止

使用Twitter API搜索推文时,“无法使用stdClass类型的对象作为数组”错误

WinForms 错误无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型

System.Data.dll 中出现“System.Data.SqlClient.SqlException”类型的未处理异常