2010-11-12 13 views
19

Tenía un proyecto que funcionaba bien. Tenía "Core Data" comprobado, y tenía todo el modelo de datos configurado. Solo comencé a agregar un par de entidades y propiedades esta noche. Cuando intento ejecutar mi aplicación ahora, ni siquiera se carga. Simplemente se cuelga en mí.executeFetchRequest: error: Una solicitud de búsqueda debe tener una entidad

Aquí está el error:

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

Estoy muy asustado, porque no tengo una copia de seguridad de este y si no puedo conseguir que funcione no sé lo que haré hacer. :)

Gracias de antemano!

EDIT: me harté con mis datos, por lo que acaba de copiar un nuevo xcdatamodel en blanco para mi proyecto y voy a empezar de nuevo. ¡Gracias por la ayuda!

+0

Debe publicar las partes relevantes del código. – Yuji

+0

¿Qué partes te gustaría? –

+0

El código alrededor de su executeFetchRequest: error: call sería muy útil para entender cuál es su problema. –

Respuesta

11

Parecía que mis datos se corrompieron, así que borré mi modelo de datos y la base de datos en el simulador de iPhone, y comencé de nuevo.

+0

Sí, no olvide eliminar la aplicación del ¡simulador! – Nuthatch

11

Tuve el mismo error.

Para mí, es porque he agregado una nueva versión de modelo, pero no la configuré como "versión actual". ¡Descuidado! Para solucionarlo, seleccione el modelo xcdata, haga clic en Diseño> Modelo de datos> Establecer versión actual. El archivo xcdatamodel tendrá un tic verde.

Esperanzas que ayuden.

+0

gracias. Obtuve uno de estos también. –

15

Después de buscar una solución, lo que me solucionó fue hacer una limpieza/compilación en Xcode.

Producto-> Limpiar, Producto-> Compilar, y luego intentar ejecutarlo.

+0

Ambos eliminé la aplicación en el Simulador e hice Clean/Build. El mismo problema, así que esto no solucionó el problema para mí. No quiero eliminar y volver a crear un modelo de datos complejo. Entonces, ¿cómo corregir el problema de forma no destructiva? –

+0

¿Por qué el voto abajo, @JayImerman? Lamento que mi respuesta no haya funcionado para usted, pero eso no significa que deba votar por ello. ¿Intentó un "Restablecer contenido y configuración" en el simulador? Funciona en un dispositivo real? –

0

Solo agregue el mismo problema. Copié todas mis entidades. Se eliminó el modelo de datos, se volvió a crear uno vacío y se pegaron las entidades nuevamente en el nuevo modelo de datos. Resolvió mi problema.

1

Construí limpio, y eso no lo solucionó. Luego eliminé la aplicación, y eso no lo solucionó. Luego construí y borré la aplicación AL MISMO TIEMPO, y eso lo solucionó.

0

Primero descargué los datos de la aplicación a través del Organizador (para ver qué sucedía) y noté que me ofrecía guardarlos con un nombre de proyecto anterior. Esto me desconcertó. Así que salí de XCode 4.6.1, borré la aplicación (y sus datos) de mi iPhone y volví.

Esta vez recibí un error que dice Cannot create an NSPersistentStoreCoordinator with a nil model. Así que busqué en el archivo AppDelegate.m y cambié el URLForResource en el método - (NSPersistentStoreCoordinator *) persistentStoreCoodinator. Fue configurado con el nombre de mi aplicación, y lo cambié a 'Modelo' para que coincida con el nombre de mi Model.xcdatamodeld.
Está funcionando ahora.

21

Mi problema es que no usé el mismo nombre para Entidad y Clase. Una solución trivial para arreglarlo es dándoles el mismo nombre.

+0

¿es una solución trivial? Simplemente puede modificar la configuración predeterminada (mapeo: entidad -> clase) en el modelo de datos. – gaussblurinc

7

Además, asegúrese de que su archivo .xcdatamodeld se encuentre en la fase "Copiar recursos de paquete" de sus Fases de compilación.

6

Comprobar si,

  • la entidad está presente en el archivo xcdatamodel.
  • nombre de la entidad utilizada son las mismas.
0

Esto me pasó cuando estaba obteniendo de la base de datos incorrecta. Mi aplicación tiene 3 bases de datos sqlite y, por supuesto, 3 instancias de ManagedObjectContext. Bueno, estaba enviando el ManagedObjectContext incorrecto a un método que le pedía que consultara una tabla que no existía en el ManagedObjectContext que envié. Después de usar el ManagedObjectContext correcto, todo fue bueno.

16

Si está utilizando MagicalRecored con Swift:

Asegúrese de que utiliza @objc Directiva en la subclase Swift NSManagedObject para hacer la clase accesible a código de Objective-C de la biblioteca MagicalRecord

@objc(MyEntity) 
class MyEntity: NSManagedObject { 
    @NSManaged var myAttribute: Int16 
} 
+2

¡Gracias! Sin embargo, el archivo de entidad se sobrescribirá siempre que vuelva a crear la subclase NSManagedObject. ¿Hay una mejor manera de hacerlo que agregar manualmente esa línea cada vez? – apb

+0

se bloquea la aplicación en iOS 9.3 pero funciona con iOS 10.3 cuando agrego @objc (MyEntity) como se sugirió, funciona en iOS 9.3 pero falla la aplicación en iOS 10.3 ¿alguna idea de por qué falla? –

0

Creo que la pregunta/problema original, y también el problema que la mayoría de estas respuestas corrige (solo de diferentes maneras) es simplemente una simple:

Cada vez que modifique sus datos principales (como agregar una entidad como usted menciona), debe eliminar todos los datos existentes (si aún no ha publicado su aplicación) o agregar una nueva versión a su modelo.

Pensé que publicaría esta respuesta, aunque esta es una pregunta anterior, porque esta respuesta parece bastante obvia y hasta ahora no se ha discutido en ninguna de las preguntas o comentarios que leí anteriormente.

0

También puede utilizar un método seleccionador de CoraData ... Sólo hacer algo como esto ...

En su CustomCoreDataManager.m

importación método init "ObjectiveRecord.h" llamada como ésta

(instancetype) init {

self = [super init];

si (auto) {

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

return self; }

Espero que esto ayude a alguien ...

3

Esto es lo que lo fijó para mí:

Como yo estaba en la conversión a Swift 3, Xcode me daba un error al declarar una nueva NSFetchRequest, diciendo que necesitaba un tipo. Después de agregar el tipo, hice lo que cualquier otra persona habría supuesto; si se escribe la solicitud, ¿por qué especificar un nombre de entidad? Entonces, lo eliminé.

En realidad fue mi error.

Swift 2.2:

let request = NSFetchRequest(entityName: "MyEntity") 

La primera vez que se convirtió al Swift 3:

let request = NSFetchRequest<MyEntity>() 

Eso me daba un error. Terminé con esto:

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

Y todo funciona bien. Personalmente, no estoy seguro de por qué necesita tener un nombre de entidad especificado, si está escribiendo la solicitud. A lo mejor actualización que en algún momento (espero)

1

Si está utilizando Swift 3 y sintaxis nueva pila de datos básicos:

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 
}() 

A continuación, usted debe utilizar este traiga sintaxis:

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

tuve este error en el primer ir a buscar después de la aplicación pone en marcha cuando se usan diferentes variaciones:

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

let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Client") 
0

¿Tal vez está tratando de cargar una base de datos de un paquete diferente/incorrecto? Por ejemplo, desde o dentro de un marco?

Tuve este problema y lo resolví cargando el DB del bundle del Framework relacionado. ¡Y luego todo funcionó bien!

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") 

y listo!

Cuestiones relacionadas