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 传递到文本字段以在核心数据模型中进行编辑

将 ManagedObject 转换为 NSObject

为啥existingObjectWithID 保存后会返回一个带temporaryID 的managedObject?

ManagedObject 和 ObservedObject

两个不同的 managedObjects 和一个 sqlite 数据库?

在 SwiftUI NaviagationLink 中创建 ManagedObject