managedObject 上的 setValuesForKeysWithDictionary 在 swift 中给出编译错误
Posted
技术标签:
【中文标题】managedObject 上的 setValuesForKeysWithDictionary 在 swift 中给出编译错误【英文标题】:setValuesForKeysWithDictionary on a managedObject gives compilation error in swift 【发布时间】:2014-10-14 07:58:33 【问题描述】:我正在快速尝试基于核心数据的应用程序,其中我正在执行以下步骤:
-
从 plist 中检索数据
遍历检索到的数据
在每次迭代期间,在 managedObjectContext 中插入一个 managedObject
在字典中插入的 managedObject 中设置值
下面是我正在使用的代码:
let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let managedObjectContext = appDelegate.managedObjectContext!
// 1. Retrieve data from plist
var defaultDataPlistPath = NSBundle.mainBundle().pathForResource("DefaultData", ofType: "plist")
var defaultDataArray = NSArray(contentsOfFile: defaultDataPlistPath!)
// 2. Store retrieved data in local db using core data apis
for menuCategoryDict in defaultDataArray
// storing menu categories
var attributes = menuCategoryDict["attributes"]
var menuCategory : MenuCategories = NSEntityDescription.insertNewObjectForEntityForName("MenuCategories", inManagedObjectContext: managedObjectContext) as MenuCategories
menuCategory.setValuesForKeysWithDictionary(attributes) // this line is giving compilation error :(
appDelegate.saveContext()
问题是 - 由于某些原因,我收到编译错误:'AnyObject?'在这一行与 '[NSObject : AnyObject]' 不同:
menuCategory.setValuesForKeysWithDictionary(attributes)
我一无所知,请建议。
【问题讨论】:
【参考方案1】:当您尝试从字典中检索值时,可能是给定键不存在值。因此,在 swift 中,您不会得到一个值,而是一个包含在选项类型中的值。 错误消息基本上说“属性”是一个包含在选项中的 AnyObject,而不是 AnyObject 类型的值。 换句话说,错误消息意味着您必须在使用它之前检查该值是否真的存在,否则您的应用程序可能会崩溃。 展开类型的最简单方法是编写“属性!”这里。 但是你真的应该阅读选项类型,因为它是 Swift 中一个非常基本的概念:
Optional Chaining in Swift
【讨论】:
以上是关于managedObject 上的 setValuesForKeysWithDictionary 在 swift 中给出编译错误的主要内容,如果未能解决你的问题,请参考以下文章
将 managedobject 从 uitableview 传递到文本字段以在核心数据模型中进行编辑
为啥existingObjectWithID 保存后会返回一个带temporaryID 的managedObject?
ManagedObject 和 ObservedObject