2014-10-14 8 views
1

Я пробуя на основе приложение основных данных в быстры, в котором я выступаю следующие шаги:setValuesForKeysWithDictionary на managedObject дает ошибку компиляции в быстром

  1. извлечение данных из списка свойств
  2. перебирать полученные данные
  3. во время каждой итерации вставки managedObject в managedObjectContext
  4. значения, установленные в вставленной 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) 

Я невежественный, любезно предложить.

ответ

0

Когда вы пытаетесь получить значение из словаря, возможно, для данного ключа не существует значения. Поэтому в swift вы не получаете значение, а значение, которое завершается в тип опции. В сообщении об ошибке в основном говорится, что «атрибуты» - это AnyObject, завернутый в параметр, а не значение типа AnyObject. Другими словами, сообщение об ошибке означает, что вы должны проверить, действительно ли это значение существует перед его использованием, поскольку в противном случае может произойти сбой приложения. Самый простой способ развернуть тип будет писать «атрибуты!». Вот. Но вы должны действительно прочитать о типах опционов, потому что это очень простая концепция Swift:

Optional Chaining in Swift