J'essaie d'écrire des données à partir d'un NSMutableArray dans une table de données de base via une boucle NSManagedObject. Il écrit le dernier enregistrement dans le tableau plusieurs fois plutôt que d'écrire chacune des lignes distinctes dans le tableau.NSManaged Object Loop Enregistrement de la même ligne plusieurs fois
J'ai effectué une boucle d'énumération rapide sur la baie pour confirmer qu'elle contient plusieurs lignes distinctes.
Ceci est la version actuelle de ma boucle de code:
//see if there were any matching rows from All_Game_Tips_List entity and of course there should be
if (fetchedObjectsForAttributes == nil) {
// do nothing as user1 does not have a saved profile
NSLog(@"error no matching rows found which sounds suspect");
}
else
{
for (id object in fetchedObjectsForAttributes) {
NSLog(@"alltip_obj = %@", object);
NSLog(@"found exactly %i matching alltip records",[fetchedObjectsForAttributes count]);
//next need to write a couple of fields from the profile entity and some from All_Game_Tips_List entity to mytips table but first need to get all needed attributes for an attribute (e.g. name, tminus, etc) for an attribute
//then insert the new row
NSManagedObjectContext *contextForMyTips = [appDelegate managedObjectContext];
NSManagedObject *myTipsFromAllTips = [NSEntityDescription
insertNewObjectForEntityForName:@"My_Game_Tips_List"
inManagedObjectContext:contextForMyTips];
NSLog(@"start wri to mytips");
for (NSManagedObject *info in fetchedObjectsForAttributes) {
[myTipsFromAllTips setValue:[info valueForKey:@"alltip_name"] forKey:@"mytip_name"];
[myTipsFromAllTips setValue:[info valueForKey:@"alltip_alert_msg"] forKey:@"mytip_alert_msg"];
[myTipsFromAllTips setValue:[info valueForKey:@"alltip_description"] forKey:@"mytip_description"];
[myTipsFromAllTips setValue:[info valueForKey:@"alltip_id"] forKey:@"mytip_id"];
[myTipsFromAllTips setValue:[info valueForKey:@"alltip_tminus_amt"] forKey:@"mytip_tminus_amt"];
[myTipsFromAllTips setValue:[info valueForKey:@"alltip_impact_type"] forKey:@"mytip_impact_type"];
} // end of for NSManagedObject loop
//commit the insert
if (![contextForMyTips save:&error]) {
NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
}
} // looping through id
} // end of else
Réflexions sur la raison pour laquelle il est coincé sur le dernier enregistrement dans le tableau?
Pouvez-vous expliquer un peu plus comment implémenter cela? Est-ce que je remplace seulement cela pour la boucle avec votre déclaration et laisse le reste du code? Je suis un peu confus. Merci d'avoir compris pourquoi je n'obtenais que le dernier rang. – Jazzmine
Essayez simplement de supprimer le cercle 'pour (NSManagedObject * info dans fetchedObjectsForAttributes)' et remplacez-le par la chaîne 'NSManagedObject * info = (NSManagedObject *) objet;'. Regardez, il y a deux cercles à votre code: 'pour (id objet dans fetchedObjectsForAttributes)' - externe, et 'pour (NSManagedObject * info dans fetchedObjectsForAttributes)' interne. Le dernier est inutile car il se superpose à l'externe. – Nekto
A travaillé aimé un champion! Merci beaucoup. – Jazzmine