2011-09-08 18 views
21

He intentado utilizar las propiedades de búsqueda un par de veces, y aunque parece ser el enfoque correcto, nunca funciona.¿Alguien tiene un ejemplo funcional de una propiedad recuperada en core-data?

En mi último intento agregué la propiedad de búsqueda a mi entidad, seleccioné la otra entidad en el modelo como el 'destino' y configuré el predicado en una condición que sé que es válida.

Problema 1: Cuando se genera la clase NSManagedObject para la entidad, no incluye nada para la propiedad recuperada. Después de buscar, agregué la declaración en el archivo .h y la declaración @dynamic en el archivo .m (sí, sé que es un tipo NSArray *).

Problema 2: Incluso después de eso, cuando accedo a esta propiedad en el código obtengo una excepción que indica algo en el sentido de que la solicitud de búsqueda no tiene una entidad. Estoy asumiendo que la 'entidad' sería la especificada como el 'destino' y está, de hecho, allí.

Por lo tanto, me gustaría que alguien proporcione un ejemplo de trabajo concreto (plataforma iOS) donde se define una propiedad captada en el modelo, declarada en una clase NSManagedObject-derived, y realmente utilizada desde el código.

En este punto estoy abandonando esta pérdida de tiempo y simplemente implementando el código de solicitud de búsqueda.

+0

teniendo el mismo problema: la entidad se encuentra en el modelo (y puedo verlo en el XML 'contents' pero el modelo compilado que se carga en la aplicación no tiene entidades de destino establecidas. ¡Frustrante! –

Respuesta

2

¿Ha echado un vistazo a esta pregunta anterior: Xcode 4 Core Data: How to use fetched property created in Data Model editor

leer a través de la respuesta aceptada y todos los comentarios. Parece que lo han solucionado.

+0

Gracias a sosborn, pero ya he pasado por eso, ahí es donde descubrí la respuesta al problema 1 en mi publicación, pero usar la propiedad en la aplicación arroja la excepción delineada en el problema 2. –

25

Aquí está mi código de bits relevantes (incluyendo los bits que ya ha mencionado):

Mi ejemplo tiene un objeto de 'tarjeta' que tiene a> relación de muchos 1- con un objeto de alta ''. Cada objeto 'Estadísticas' tiene un 'resultado' que puede ser 1-4. Mi propiedad recuperada es simple para darle a mi objeto 'Tarjeta' una matriz de objetos 'Estadísticas' que son de 'resultado' = 1 solamente.

Quería usar la propiedad recuperada para poder acceder fácilmente a los objetos 'Carta' que tenían más de cierto número y clase de objetos 'Estadísticas'.

Por lo tanto, en el objeto 'Tarjeta' puse la propiedad Obtenida 'statsOfTypeOne', con el Destino establecido en 'Stats'.

En el predicado de esta propiedad descabellada puse

(SELF.outcome=1) AND (SELF.card=$FETCH_SOURCE) 

'yo' es el registro 'alta', y $ FETCH_SOURCE mágicamente se convierte en el objeto 'tarjeta' cuando se ejecuta.

Al igual que hizo, pongo el siguiente en el .hy archivos .m para la 'tarjeta' objeto:

@property (nonatomic, retain) NSArray *statsOfTypeOne; 
@dynamic statsOfTypeOne; 

Luego, en mi código utilicé:

[self.managedObjectContext refreshObject:cardInstance mergeChanges:YES]; 
[cardInstance valueForKey:@"statsOfTypeOne"] 

llegar en la matriz (aunque cardInstance.statsOfTypeOne debería estar bien). Sin el objeto de actualización, no estaba actualizando la propiedad Obtenida (según el manual).

I piensa eso es todo lo que hice para que funcione. Avíseme si funciona para usted.

Peter

4

Añadiendo a @ Peter la respuesta. He aquí cómo lo tengo trabajando en Swift 2.0 y Xcode 7:

import Foundation 
import CoreData 

@objc(Card) 
class Card: NSManagedObject { 

    @NSManaged var statsOfTypeOne: [Stat] 

} 

Y luego, al leer la propiedad descabellada:

managedObjectContext.refreshObject(someCard, mergeChanges: true) 
// This works and returns [Stat] type 
someCard.statsOfTypeOne 
// So does this 
someCard.valueForkey("statsOfTypeOne") as! [Stat] 
Cuestiones relacionadas