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

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

Вот ошибка:

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

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

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

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

Ответы [ 18 ]

0 голосов
/ 04 января 2018

Может быть, вы пытаетесь загрузить базу данных из другого / неправильного пакета? Например из или в рамках?

У меня была эта проблема, и я решил ее, загрузив БД из bundle соответствующей платформы. И тогда все работало нормально !!

Swift 4 + MagicalRecord:

let frameworkBundle = Bundle(for: AClassFromTheFramework.self)
let managedObjectModel = NSManagedObjectModel.mergedModel(from: [frameworkBundle])
MagicalRecord.setShouldAutoCreateManagedObjectModel(false)
NSManagedObjectModel.mr_setDefaultManagedObjectModel(managedObjectModel)
MagicalRecord.setupCoreDataStack(withAutoMigratingSqliteStoreNamed: "db.sqlite")

И вуаля!

0 голосов
/ 27 февраля 2016

Вы также можете использовать метод установки из CoraData ... Просто сделайте что-то вроде этого ...

На вашем CustomCoreDataManager.m

import "ObjectiveRecord.h" вызовите метод инициализации, подобный этому

(instancetype) init {

self = [super init];

if (self) {

[[CoreDataManager sharedManager] setModelName: @ "YourModelName "];}

вернуть себя;}

Надеюсь, это кому-нибудь поможет ...

0 голосов
/ 25 марта 2015

Я думаю, что оригинальный вопрос / проблема, а также проблема, которую исправляет большинство из этих ответов (просто по-разному), просто очень проста:

Каждый раз, когда вы изменяете свои основные данные (например, добавляете сущность, о которой упоминаете), вы должны либо удалить все существующие данные (если вы еще не опубликовали свое приложение), либо добавить новую версию в вашу модель.

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

0 голосов
/ 18 мая 2013

Сначала я скачал данные приложения через органайзер (чтобы посмотреть, что происходит) и заметил, что оно предложило мне сохранить его под предыдущим именем проекта. Это озадачило меня. Поэтому я вышел из XCode 4.6.1, удалил приложение (и его данные) с моего iPhone и вернулся.

На этот раз я получил ошибку, сказав Cannot create an NSPersistentStoreCoordinator with a nil model. Поэтому я посмотрел в файл AppDelegate.m и изменил URLForResource в методе - (NSPersistentStoreCoordinator *) persistentStoreCoodinator. Для него было задано имя моего приложения, и я изменил его на «Модель», чтобы он совпадал с именем моего Model.xcdatamodeld.
Сейчас работает.

0 голосов
/ 20 января 2012

Просто добавьте ту же проблему.Я скопировал все свои сущности.Удалил модель данных, воссоздал пустую и вставил объекты обратно в новую модель данных.Решил мою проблему.

0 голосов
/ 02 мая 2018

Я наткнулся на ту же ошибку, когда сделал первые шаги в Core Data (и iOS 11 и Swift 4).Я начал с книги (шестое издание, предназначенное для Swift 4, но предположительно включающее некоторые устаревшие материалы).

Как и предполагалось в книге, мой код был:

let fetchRequest = NSFetchRequest<ReminderData>()
let entity = ReminderData.entity()
fetchRequest.entity = entity
do {
    let rows = try managedObjectContext.fetch(fetchRequest)
} catch {
    fatalError("Unresolved error")
}

Оказалось, что всеЯ получил от ReminderData.entity() это nil.Не уверен, что я сделал что-то не так при настройке модели данных или ... Документы Apple говорят, что NSManagedObject.entity() не должно быть перезаписано?

Короче говоря, файл Codegen ReminderData+CoreDataProperties.swift действительно содержит решение:

@nonobjc public class func fetchRequest() -> NSFetchRequest<ReminderData> {
    return NSFetchRequest<ReminderData>(entityName: "ReminderDB")
}

, и это было все, что мне нужно было использовать, чтобы в итоге получить правильное NSFetchRequest, без проблем с NSEntityDescription, проблема исчезла!

let fetchRequest = NSFetchRequest<ReminderData>(entityName: "ReminderDB")
do {
    let rows = try managedObjectContext.fetch(fetchRequest)
} catch {
    fatalError("Unresolved error")
}
0 голосов
/ 02 июля 2018

Я столкнулся с той же проблемой, на самом деле я звонил MyEnty вместо MyEntity, поэтому, пожалуйста, перепроверьте, какие имена вы дали своим сущностям, и тоже самое, а также проверьте, вызываете ли вы те же атрибуты, которые вы определили как name

0 голосов
/ 29 апреля 2014

Это случилось со мной, когда я загружал из неверной базы данных.Мое приложение имеет 3 базы данных sqlite и, конечно, 3 экземпляра ManagedObjectContext.Я отправил неправильный ManagedObjectContext методу, который попросил его запросить таблицу, которой не было в представленном мною ManagedObjectContext.После использования правильного ManagedObjectContext все было хорошо.

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