Core Data NSEntityDescription.entityForName возвращает nil, но manageObjectModel.entities перечисляет сущности

Я пытаюсь быстро создать подкласс NSManagedObject. Я создал две сущности с именами Pages и Book в редакторе моделей и сгенерировал их файлы классов. Вот два класса:

@objc(Pages)
class Pages: NSManagedObject {

    @NSManaged var pageNo: NSNumber

}

@objc(Book)
class Book: NSManagedObject {

    @NSManaged var pageCount: NSNumber
    @NSManaged var title: String
    @NSManaged var fetchLastPage: [Pages]

}

В качестве теста для создания экземпляра страниц я написал этот код в ViewDidLoad, который потерпел неудачу, потому что не смог найти объект в модели:

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

    let managedContext = appDelegate.managedObjectContext!

    var pages = NSEntityDescription.insertNewObjectForEntityForName("StoreTest.Pages", inManagedObjectContext: managedContext)

«StoreTest» — это имя моего приложения, которое также задается в редакторе моделей для двух объектов. Чтобы увидеть, что происходит, я добавил этот код перед созданием экземпляра:

    var pagesEntity = NSEntityDescription.entityForName("StoreTest.Pages", inManagedObjectContext: managedContext)
    println("pagesEntity = \(pagesEntity)")

    var ents = managedContext.persistentStoreCoordinator!.managedObjectModel.entities
    println("entities = \(ents)")

Вызов NSEntityDescription.entityForName возвращает nil, но вызов manageObjectModel.entities возвращает две сущности.

Я убедился, что нет проблем с правописанием. Кроме того, управляемый объект не равен нулю. Цель моего файла модели данных правильно настроена на мой модуль приложения.

Я использую xCode 6.4.

Спасибо за вашу помощь!


person user2732722    schedule 13.09.2015    source источник
comment
Я никогда не связывал ставить точку в имени сущности. Хотя я не видел документов, говорящих об этом, пробовали ли вы удалить его и зачем он вам нужен?   -  person Wain    schedule 13.09.2015
comment
В этом была проблема. Спасибо! Я вынул имя модуля.   -  person user2732722    schedule 13.09.2015
comment
Это entityForName, а не entityForClassName. Имя вашей сущности — Pages.   -  person Willeke    schedule 13.09.2015


Ответы (1)


Удалите дополнительный StoreTest. из имени объекта, он вам там не нужен, и точка, вероятно, вызывает некоторые проблемы с поиском.

На самом деле может быть просто то, что вы запутались в том, что такое имя сущности, оно установлено в модели, а затем вы устанавливаете имя класса (обычно такое же, как имя сущности).

person Wain    schedule 13.09.2015