2010-06-27 12 views
2

J'utilise une tableview avec des données de coredata en utilisant nsfetchedresultscontroller. Lorsque la vue se charge, je crée une nouvelle entité en utilisanttableview coredata objet temporaire

SomeManagedObject *someManagedObject = [NSEntityDescription insertNewObjectForEntityForName:@"SomeManagedObject" inManagedObjectContext:self.managedObjectContext]; 

De cette façon, la nouvelle entité apparaît dans ma vue de table. Maintenant je veux que cette entité soit seulement temporaire, mais quand j'édite un objet dans la vue de table et enregistre le managedObjectContext l'entité temporaire sera également sauvée et je ne veux pas cela.

Est-ce que c'est un moyen de sauvegarder un seul objet et pas tout à l'intérieur de managedObjectContext?

Est-ce que c'est leur autre façon de créer un objet temporaire pour ma tableview.

Toute aide serait la bienvenue. Merci Ton

+0

Vous pouvez passer un contexte nul à initWithEntity: insertIntoManagedObjectContext. Voir cette question: http://stackoverflow.com/questions/3256195/how-to-deal-with-temporary-nsmanagedobject-instances – Symmetric

Répondre

0

Non, dans une sauvegarde managedObjectContext est un tout ou rien. Ce que je ne sais pas est ce qui se passe si vous définissez le magasin persistant de l'objet géré à zéro

- (void)assignObject:(id)object toPersistentStore:(NSPersistentStore *)store 

Si vous enregistrez le managedObjectContext cet objet ne doit pas être sauvé. C'est juste une supposition, mais dites-moi si cela fonctionne ;-)

+0

Non. cela ne fonctionne pas. Je suppose qu'il assignera l'objet au magasin par défaut en utilisant nil. – Ton

0

Pour les objets gérés temporaires, créez-les avec un deuxième contexte d'objet géré (MOC). Lorsque vous avez terminé, relâchez simplement le MOC sans effectuer de sauvegarde.

Regardez le code Ajouter un livre dans CoreDataBooks qui utilise la même approche pour jeter l'objet nouvellement ajouté lorsque l'utilisateur annule.

+0

Ne créez pas de contexte séparé. C'est extrêmement inutile et coûteux. Si l'objet doit être temporaire, créez-le avec -init et ne passez pas dans un contexte. –

+0

D'accord avec Marcus, voici comment je le fais, et j'utilise une classe de base pour gérer l'insertion récursive dans un contexte valide ... http://www.locassa.com/index.php/2011/05/temporary- storage-in-apples-coredata/ –

+0

@ MarcusS.Zarra, ne recommandez-vous toujours pas de créer un contexte séparé pour les objets temporaires (potentiellement jetés)? Est-il toujours valide en 2014? Merci d'avance. –

2

Créez le nouvel objet NSManagedObject avec alloc init et passez nil au lieu de NSManagedObjectContext. Ensuite, si vous décidez ultérieurement que vous voulez que cet objet soit permanent, définissez son contexte. Toutefois, cela ne vous permettra pas de le voir dans un NSFetchedResultsController car il ne sera pas associé au contexte.

Une meilleure réponse peut être fournie si vous pouviez expliquer quel est votre but ultime.

+0

Cela échouera sur les propriétés @dynamic. Le doc pour initWithEntity: insertIntoManagedObjectContext indique "Important Cette méthode est l'initialiseur désigné pour NSManagedObject Vous ne devez pas initialiser un objet géré simplement en lui envoyant init." – Symmetric

+0

Votre commentaire n'a pas de sens. Ma réponse états spécifiques à passer en néant pour le NSManagedObjectContext. Il n'y avait aucune implication que le «-init» nu doit être appelé. –

+0

Ok, désolé. J'ai lu "alloc init" ci-dessus comme init init, pas initWithEntity.En tout cas, votre réponse à cette autre question le rend plus clair, merci: http://stackoverflow.com/questions/3256195/how-to-deal-with-temporary-nsmanagedobject-instances – Symmetric