2015-12-09 4 views
1

Я использую «CoreData», я создал класс типа «NSManagedObject» моего объекта с именем «Project», но когда я открываю «ViewController», где я инициализирую класс как свойство, я получаю эта ошибкаNSManagedObject не инициализируется

2015-12-09 14:15:54.961 MyProject[790:17582] CoreData: error: Failed to call designated initializer on NSManagedObject class 'MyProject.Project' 

в моем классе Project NSManagedObject у меня есть метод, чтобы добавить ребенка NSManagedObject в NSOrderdSet:

class Project: NSManagedObject { 


func requestAddNewWeek (value : Content) { 

    guard let mutableCopyOfSet = projectContent?.mutableCopy() as? NSMutableOrderedSet else { 
     return 
    } 

    mutableCopyOfSet.addObject(value) 

    projectContent = mutableCopyOfSet.copy() as? NSOrderedSet 
} 

} 

Но поскольку «проект» не инициализируется правильно, каждый раз, когда я называю метод в моем диспетчере просмотра nil Unwrapped и произошла ошибка.

@IBAction func saveButtonPressed(sender: AnyObject) { 
    // 

    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 

    let managedContext = appDelegate.managedObjectContext as NSManagedObjectContext 

    let entity = NSEntityDescription.entityForName("WeekContent", inManagedObjectContext:managedContext) 

    let newWeek = Content(entity: entity!, insertIntoManagedObjectContext: managedContext) 

    //Here I call project, but it unwraps a nil 
    project.requestAddNewWeek(newWeek) 


    do { 
     try managedContext.save() 

    } catch let error as NSError { 
     print("Could not save \(error), \(error.userInfo)") 
    } 
    print(entity) 
} 

Вот как я определил 'Project' в моем ViewController:

var project : Project = Project() 

Как мне это исправить.

+1

http://stackoverflow.com/questions/14671478/coredata-error-failed-to-call-designated-initializer-on-nsmanagedobject- class check out this – evnaz

ответ

2

Вы не можете использовать инициализатор по умолчанию () на NSManagedObject, потому что объект сильно зависит от контекста управляемого объекта Core Data.

Назначенный инициализатор - которые должны быть использованы - это

init(entity entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext?) 
+0

Можете ли вы показать мне, как добавить это в мой код? –

+0

Вам нужен объект описания объекта и контекст управляемого объекта в стек основных данных. Объявите переменную как необязательную, неявную развернутую опцию или (ближе всего к философии Swift), инициализируйте ее лениво. Или взгляните на упомянутые ссылки. – vadian

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