executeFetchRequest: error: запрос на выборку должен иметь сущность - PullRequest
20 голосов
/ 12 ноября 2010

У меня был проект, который работал нормально. Он проверил «Базовые данные» и настроил модель данных. Я только начал добавлять пару объектов и свойств сегодня вечером. Когда я пытаюсь запустить свое приложение сейчас, оно даже не загружается. Это просто падает на меня.

Вот ошибка:

'NSInvalidArgumentException', reason: 'executeFetchRequest:error: A fetch request must have an entity.'

Я действительно напуган, потому что у меня нет этой резервной копии, и если я не могу заставить ее работать, я не знаю, что я буду делать. :)

Заранее спасибо!

EDIT: Я сыт по горло своими данными, поэтому я просто скопировал новый пустой xcdatamodel в свой проект, и я собираюсь начать все заново. Спасибо за помощь!

Ответы [ 18 ]

21 голосов
/ 21 мая 2013

Моя проблема в том, что я не использовал одно и то же имя для сущности и класса. Тривиальное решение - это дать им одно и то же имя.

16 голосов
/ 08 марта 2015

Если вы используете MagicalRecored с Swift:

Убедитесь, что вы используете директиву @objc в подклассе Swift NSManagedObject, чтобы сделатькласс, доступный для кода Objective-C из библиотеки MagicalRecord

@objc(MyEntity)
class MyEntity: NSManagedObject {
    @NSManaged var myAttribute: Int16
}
15 голосов
/ 12 января 2012

После того, как я все время искал решение, для меня было решено выполнить чистку / сборку в XCode.

Product-> Clean, Product-> Build, затем попробуйте запустить его.

12 голосов
/ 18 января 2011

У меня была такая же ошибка.

Для меня это потому, что я добавил новую версию модели, но не установил ее как «Текущая версия».Беспечный я!Чтобы исправить, выберите xcdatamodel, нажмите «Дизайн»> «Модель данных»> «Установить текущую версию».Файл xcdatamodel будет иметь зеленую галочку.

Надежды, которые помогают.

11 голосов
/ 04 января 2011

Казалось, что мои данные были повреждены, поэтому я удалил свою модель данных и базу данных в симуляторе iPhone и начал все заново.

7 голосов
/ 06 сентября 2013

Также убедитесь, что ваш файл .xcdatamodeld находится в фазе «Копирование ресурсов комплекта» ваших фаз сборки.

6 голосов
/ 10 сентября 2013

Проверьте, присутствует ли

  • сущность в файле xcdatamodel.
  • имя сущности одинаковое.
4 голосов
/ 09 ноября 2016

Вот что исправило это для меня:

Когда я переходил на Swift 3, XCode сообщал мне об ошибке при объявлении нового NSFetchRequest, говоря, что ему нужен тип.После добавления типа я сделал то, что мог бы предположить любой другой;если запрос набирается, зачем указывать имя объекта?Итак, я удалил его.

На самом деле это была моя ошибка.

Swift 2.2:

let request = NSFetchRequest(entityName: "MyEntity")

При первом преобразовании в Swift 3:

let request = NSFetchRequest<MyEntity>()

Это дало мне ошибку.Я закончил с этим:

let request = NSFetchRequest<MyEntity>(entityName: "MyEntity")

И все работает отлично.Лично я не уверен, зачем нужно указывать имя объекта, если вы вводите запрос.Может быть, они обновят это в какой-то момент (я надеюсь)

2 голосов
/ 19 июня 2017

Если вы используете Swift 3 и новый синтаксис стека Core Data:

var persistentContainer: NSPersistentContainer = {
    let container = NSPersistentContainer(name: "MyAppModel")
    container.loadPersistentStores(completionHandler: {
        (storeDescription, error) in
        if let error = error as NSError? {
            fatalError("Unresolved error \(error), \(error.userInfo)")
        } else {
            print(storeDescription)
        }
    })
    return container
}()

Тогда вы должны использовать этот синтаксис выборки:

let request: NSFetchRequest<Client> = Client.fetchRequest()

У меня была эта ошибка в первыйполучить после запуска приложения при использовании разных вариантов:

let request: NSFetchRequest<NSFetchRequestResult> = Client.fetchRequest()

let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Client")
1 голос
/ 25 февраля 2013

Я построил чисто, и это не исправило это. Затем я удалил приложение, и это не помогло. Затем я собрал чистое и удалил приложение в то же время, и это исправило его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...