我正在swift中尝试基于核心数据的应用程序,我正在执行这些步骤:
以下是我正在使用的代码:
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)
我很无能,善意地建议。
答案 0 :(得分:0)
当您尝试从字典中检索值时,可能不存在给定键的值。因此,在swift中,您不会获得值,而是包含在选项类型中的值。 错误消息基本上表示"属性"是包装在Option中的AnyObject,而不是AnyObject类型的值。 换句话说,错误消息意味着您必须在使用它之前检查该值是否确实存在,否则您的应用程序可能会崩溃。 解开类型的最简单方法是编写"属性!"这里。 但是你应该真正阅读选项类型,因为它是Swift中一个非常基本的概念: