2016-01-10 2 views
0

У меня возникла проблема с извлечением данных с использованием объекта Core Data.Swift CoreData: Не удалось вызвать назначенный инициализатор на NSManagedObject

Это код, используемый для извлечения данных

let fetchRequest = NSFetchRequest(entityName: "Country") 

     var countries = [Country!]() 

     do { 
      countries = try self.managedObjectContext!.executeFetchRequest(fetchRequest) as! [Country!] 
     } catch { 
      // Replace this implementation with code to handle the error appropriately. 
      // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 
      let nserror = error as NSError 
      NSLog("Unresolved error \(nserror), \(nserror.userInfo)") 
      abort() 
     } 

Это определение модельной

import Foundation 
import CoreData 

@objc(Country) 
class Country: NSManagedObject 
{ 

..... 
} 

Это расширение модели

import Foundation 
import CoreData 

extension Country { 

    @NSManaged var countryCode: String? 
    @NSManaged var dialCode: String? 
    @NSManaged var name: String? 

} 

Я получаю следующее сообщение об ошибке :

CoreData: error: Failed to call designated initializer on NSManagedObject class 'Country' 
fatal error: unexpectedly found nil while unwrapping an Optional value 

Это нарушение на этой линии:

countries = try self.managedObjectContext!.executeFetchRequest(fetchRequest) as! [Country!] 

Я не уверен, что я понимаю, что проблема здесь. Может кто-нибудь советовать?

Спасибо!

+0

Это, вероятно, потому, что где-то есть объявление переменного вдоль линий 'вара MyObject = Страна() '. Это не просто объявляет переменную, но также создает экземпляр с использованием инициализатора по умолчанию ('init'), тогда как NSManagedObjects (и подклассы) ДОЛЖНЫ быть инициализированы с использованием назначенного инициализатора:' initWithEntity: insertIntoManagedObjectContext: '. Объявите его вместо этого как «var myObject: Country» – pbasdf

ответ

0

Просто удалите восклицательный знак в этих двух линий соответственно

var countries = [Country]() 

countries = try self.managedObjectContext!.executeFetchRequest(fetchRequest) as! [Country] 

NSManagedObject объекты могут быть использованы в качестве не по желанию.

неявный развернутый необязательный типа (с восклицательным знаком) заставляет объект вызвать конкретный инициализатору, который должен быть initWithEntity:insertIntoManagedObjectContext:

+0

Спасибо за ответ. Но после удаления восклицательного знака на этих двух строках, я снова получаю ту же ошибку: 'CoreData: ошибка: не удалось вызвать назначенный инициализатор в классе NSManagedObject 'Country' фатальная ошибка: неожиданно найдено нуль при разворачивании необязательного значения ' – bla0009

+0

Вы реализовали метод 'init()' в 'Country'? – vadian

+0

Нет, должен ли я реализовать специальный метод 'init()'? Или расширить существующий метод 'initWithEntity'? Благодаря! – bla0009

Смежные вопросы

 Смежные вопросы