2009-09-02 4 views
12

J'ai un objet entité Pays avec le nom du pays et le code du pays. C'est une sous-classe de NSManagedObject et je l'utilise avec un modèle de données de base pour stocker sa valeur dans un magasin persistant.Sous-classe NSManagedObject en dehors de l'objet géré en tant qu'objet normal

J'ai un endroit où le même objet Pays sera utilisé comme un objet normal, c'est-à-dire que je l'utiliserai pour stocker un nom de pays temporaire.

Pour que j'ai initialisé le pays suivant

[NSManagedObject alloc] init] 

Initialisation fait avec succès, mais je ne suis pas en mesure de définir une propriété à cet objet. D'où j'ai fait une exploration. Dans ce que j'ai trouvé que, init pour NSManagedObject n'est pas pris en charge selon la documentation.

Je ne sais pas comment utiliser le pays NSManagedObject avec CoreData, ainsi qu'un objet normal.

Répondre

10

2e paragraphe de l'aperçu de la documentation de la classe NSManagedObject:

Un objet géré est associé à une description de l'entité (une instance de NSEntityDescription) qui fournit métadonnées sur l'objet (y compris le nom du entité que l'objet représente et les noms de ses attributs et relations ) et avec un contexte d'objet géré qui suit des modifications apportées au graphique d'objet. Il est important qu'un objet géré soit correctement configuré pour être utilisé avec les données Core . Si vous instanciez directement un objet géré , vous devez appeler l'initialiseur désigné (initWithEntity: insertIntoManagedObjectContext :).

De la documentation de la méthode:

Important: Cette méthode est l'initialiseur désigné pour NSManagedObject. Vous ne devez pas initialiser un objet géré simplement par en lui envoyant init.

La documentation est en fait très bonne.

Vous ne voulez pas essayer d'utiliser NSManagedObject en dehors d'une pile CoreData viable. NSManagedObjects sont conçus explicitement pour fonctionner dans un environnement de base de données correctement configuré. Si vous avez besoin d'une instance temporaire, vous pouvez créer un magasin en mémoire ou en créer un dans votre magasin habituel et ne pas enregistrer les modifications sans les supprimer d'abord.

+0

Merci! Il n'est donc pas possible de s'initialiser comme nous le faisons pour un objet normal. Je suppose que vous faites référence à NSInMemoryStoreType pour le stockage persistant, de sorte que l'entité insérée sera stockée dans la mémoire RAM volatile. J'ai une autre question - quand sera-t-elle effacée ou devons-nous la débobiner manuellement? – raksja

+0

Il sera effacé lorsque vous lui demanderez d'effacer (manuellement) ou lorsque votre application sera fermée ... InMemoryStores fonctionne comme les autres magasins, juste que la persistance est ... en mémoire seulement. – bbum

2

Utilisez initWithEntity:insertIntoManagedObjectContext: et transmettez nil pour contexte d'objet géré.

Questions connexes