Mise à jour: Actuellement à la recherche dans minusSet de nsset liens: Comparing Two Arraysmise à jour en vrac et insertion occasionnelle (de CoreData) - Trop lent
Salut les gars,
pourraient bénéficier de votre sagesse ici ..
I » En utilisant Coredata dans mon application, au premier lancement, je télécharge un fichier de données et insère plus de 500 objets (chacun avec 60 attributs) - rapide, pas de problème. Chaque lancement suivant je télécharge une version mise à jour du fichier, à partir de laquelle j'ai besoin de mettre à jour tous les attributs des objets existants (sauf peut-être 5 attributs) et en créer de nouveaux pour les éléments qui ont été ajoutés au fichier téléchargé.
Ainsi, le premier lancement je reçois 500 objets .. dire une semaine plus tard mon dossier contient maintenant 507 articles ..
Je crée deux tableaux, l'un pour existants et un pour les télécharger.
NSArray *peopleArrayDownloaded = [CoreDataHelper getObjectsFromContext:@"person" :@"person_id" :YES :managedObjectContextPeopleTemp];
NSArray *peopleArrayExisting = [CoreDataHelper getObjectsFromContext:@"person" :@"person_id" :YES :managedObjectContextPeople];
Si le nombre de chaque tableau est égal alors je fais ceci:
NSUInteger index = 0;
if ([peopleArrayExisting count] == [peopleArrayDownloaded count]) {
NSLog(@"Number of people downloaded is same as the number of people existing");
for (person *existingPerson in peopleArrayExisting) {
person *tempPerson = [peopleArrayDownloaded objectAtIndex:index];
// NSLog(@"Updating id: %@ with id: %@",existingPerson.person_id,tempPerson.person_id);
// I have 60 attributes which I to update on each object, is there a quicker way other than overwriting existing?
index++;
}
} else {
NSLog(@"Number of people downloaded is different to number of players existing");
Alors vient maintenant la partie lente.
je finis à l'aide de ce (qui est tooooo lent):
NSLog(@"Need people added to the league");
for (person *tempPerson in peopeArrayDownloaded) {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"person_id = %@",tempPerson.person_id];
// NSLog(@"Searching for existing person, person_id: %@",existingPerson.person_id);
NSArray *filteredArray = [peopleArrayExisting filteredArrayUsingPredicate:predicate];
if ([filteredArray count] == 0) {
NSLog(@"Couldn't find an existing person in the downloaded file. Adding..");
person *newPerson = [NSEntityDescription insertNewObjectForEntityForName:@"person" inManagedObjectContext:managedObjectContextPeople];
est-il un moyen de générer un nouveau tableau d'éléments d'index se référant aux éléments supplémentaires dans mon fichier téléchargé? Par ailleurs, sur mes tablesViews, j'utilise NSFetchedResultsController, ainsi les attributs de mise à jour appellent [cell setNeedsDisplay]; .. environ 60 fois par cellule, pas une bonne chose et il peut planter l'application.
Merci pour la lecture :)
Remarque: Il est considéré comme incorrect d'avoir des arguments sans nom dans vos sélecteurs. – retainCount
Merci pour le commentaire, j'apprends encore. Où est-ce que je fais ça? – iOSDevil