setValuesForKeysWithDictionary для managedObject выдает ошибку компиляции в swift
Я пробую основанное на данных приложение в 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)
Я невежественна, любезно предлагаю.
1 ответ
Когда вы пытаетесь получить значение из словаря, это может означать, что для данного ключа не существует никакого значения. Поэтому в swift вы получаете не значение, а значение, заключенное в тип параметра. Сообщение об ошибке в основном говорит, что "атрибуты" - это AnyObject, заключенный в Option, а не значение типа AnyObject. Другими словами, сообщение об ошибке означает, что вы должны проверить, действительно ли значение существует, прежде чем использовать его, потому что в противном случае ваше приложение может вылетать. Самый простой способ развернуть тип - написать "атрибуты!" Вот. Но вы действительно должны прочитать о типах опций, потому что это очень простая концепция в Swift: