2010-09-04 3 views
0

Je dois éditer une ligne de données dans une Entité qui a une relation avec mon Entité principale de mon fetchedResultsController, dans ce cas "theUser" étant une instance de mon entité User .Modification de la ligne Données de base de l'entité liée à managedObjectContext via la relation

J'ai fondamentalement besoin d'éditer l'une des lignes CannedMessage qui existent déjà et de l'enregistrer. Je peux accéder à l'amende "Messages" comme vous voyez ci-dessous, mais je ne suis pas sûr une fois que j'ai trouvé le CannedMessage je veux comment je l'enregistre dans le managedObjectContext pour "theUser"

Un conseil?

NSArray *msgs = [theUser.Messages allObjects]; 

NSPredicate *activeMatch = [NSPredicate predicateWithFormat:@"defaultMessage == 1"]; 
NSArray *matched = [msgs filteredArrayUsingPredicate:activeMatch]; 

CannedMessage *msgToEdit; 

for(CannedMessage *msg in matched) { 
    msgToEdit = msg; 
} 

Répondre

0

Votre problème est que vous pensez en termes SQL au lieu des termes orientés objet de Core Data. Les données que vous recherchez ne se trouvent pas dans une ligne SQL mais dans l'attribut d'un objet géré. Dans ce cas (je suppose) vous recherchez un attribut d'une instance CannedMessage.

Le tableau matched contiendra soit des objets gérés initialisées avec l'entité CannedMessage ou une instance d'une sous-classe NSManagedObject dédié (si vous configurez un qui il semble que vous avez fait.)

permet de dire que l'attribut est nommé theMsg. Pour accéder à l'attribut dans les objets gérés génériques:

for(CannedMessage *msg in matched) { 
    msgToEdit = [msg valueForKey:@"theMsg"]; 
} 

... pour accéder à une classe personnalisée:

for(CannedMessage *msg in matched) { 
    msgToEdit = msg.theMsg; 
} 

Il est très important lors de l'apprentissage de base de données pour simplement oublier tout ce que vous connaissez SQL. Rien sur SQL ne se traduit réellement en Core Data. Core Data n'est pas un objet orienté autour de SQL. Les entités ne sont pas des tables, les relations ne sont pas des tables ou des jointures de liens, les attributs ne sont pas des colonnes et les valeurs ne sont pas des lignes. Au lieu de cela, les données de base créent des objets comme vous le feriez si vous écriviez manuellement une classe personnalisée pour modéliser un objet, un événement ou une condition du monde réel. Core Data utilise SQL comme une des nombreuses options de persistance. D'après mon expérience, plus vous en savez sur SQL, plus il est difficile de passer à Core Data et à d'autres API de graphe d'objets. Vous voulez traduire les nouvelles choses à ce que vous avez déjà maîtrisé. C'est naturel mais résiste à l'envie.

Questions connexes