2014-10-28 5 views
3

Я нахожусь на xcode 6.1 и разрабатываю для iOS 8.1. У меня есть простой проект под названием CoreDataTest, где я играю с основными данными.Метод Init для основного объекта данных недоступен

Модель:

import CoreData 

class Licence: NSManagedObject { 
    @NSManaged var name: String 
} 

и

enter image description here

Теперь я хочу, чтобы создать объект лицензии. Это то, что мне нужно до создания объекта:

let appDel:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate 
let context:NSManagedObjectContext = appDel.managedObjectContext! 

let ent = NSEntityDescription.entityForName("Licence", inManagedObjectContext: context) 

Проблема заключается в том, что Xcode не дает правильный конструктор для объекта. Когда я начинаю печатать:

var newLicence = Licence(.. 

я не автоматическое завершение, как в этом примере:

enter image description here

Я просто получить NSManagedObject(), как автозаполнение. Какие-нибудь идеи в чем-то не так?

+0

Для Xcode 6.1.1 автозавершение не отображается, но метод init (с использованием сущности и контекста управляемого объекта) все равно можно вызвать. –

ответ

4

решаемые его, читая документацию для NSManagedObject :)

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

Так что в моем классе я реализовал:

override init(entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext?) { 
    super.init(entity: entity, insertIntoManagedObjectContext: context) 
} 

и теперь он работает.

+0

Это должно быть новое в последней версии xcode. Я видел это, не делая этого. (возможно, в более ранней версии) –

+1

Обратите внимание, что в нем также говорится: _ Вам не рекомендуется отменять этот метод - вместо этого вы должны переопределить awakeFromInsert и/или awakeFromFetch (если существует логика, общая для этих методов, ее следует включить в третий метод, который вызывается из обоих). Если вы выполняете пользовательскую инициализацию в этом методе, вы можете вызвать проблемы с отменой и повторным действием. – ThomasW

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