2011-01-22 1 views
3

J'ai le code suivant, et je me demandais s'il y avait un moyen de le rendre plus rapide. Fondamentalement, mon application télécharge du JSON (environ 4000 enregistrements) à partir du réseau, et met à jour ou crée mes objets gérés en fonction des données. Pour le moment, c'est assez lent, et je peux voir pourquoi, mais je suis nouveau pour les données de base, alors je me demandais si je pouvais faire quelque chose pour le rendre plus rapide?Mise à jour des données de base s'il existe ou créer un nouvel objet géré. Puis-je faire cela plus vite?

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Company" inManagedObjectContext:managedObjectContext]; 
[request setEntity:entity]; 
NSMutableArray *coreDataArray = [[managedObjectContext executeFetchRequest:request error:nil] mutableCopy]; 
[request release]; 

for (NSDictionary *dict in arr) { 
    NSArray *filtered = [coreDataArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(code == %@)", [dict objectForKey:@"Code"]]]; 
    //NSLog(@"COREDATA ARRAY: %d FILTERED ARRAY: %d CODE: %@ COREDATA FIRST CODE: %@", [coreDataArray count], [filtered count], [dict objectForKey:@"Code"], [[coreDataArray objectAtIndex:0] code]); 
    if ([filtered count] > 0) { 
    Company *c = [filtered objectAtIndex:0]; 
    if ([dict objectForKey:@"Defunct"]) { 
    NSLog(@"DELETED DEFUNCT COMPANY"); 
    [managedObjectContext deleteObject:c]; 
    } else { 
    [c populateWithJSONDictionary:dict]; 
    } 
    } else { 
    Company *c = (Company *)[NSEntityDescription insertNewObjectForEntityForName:@"Company" inManagedObjectContext:managedObjectContext]; 
    [c populateWithJSONDictionary:dict]; 
    } 

    float percent = (float)[arr indexOfObject:dict]/[arr count]; 
    [self performSelectorInBackground:@selector(updateProgressView:) withObject:[NSString stringWithFormat:@"%f",percent]]; 
} 

[coreDataArray release]; 

Un grand merci pour toute aide que vous pouvez donner.

+0

êtes-vous sûr que les données JSON extraction est une question pas pour vous ralentir l'application vers le bas si vous utilisez SBJSON. Parce qu'il est plus lent que les autres presque 9 fois. Et aussi s'il vous plaît accepter des réponses aussi. – Robin

+0

Salut, pas l'analyse syntaxique JSON est très rapide, j'utilise JSON Framework. Je suis à peu près sûr que c'est le tableau filtré à l'intérieur de la boucle for qui le ralentit. – Marky

Répondre

2

Vous devriez consulter la section Core Data Programming Guide: Performance

Il a quelques conseils spécifiques pour la performance d'importation de données.

Dans le cas d'Apple déplace la documentation à nouveau, voici une bonne requête de recherche sur Google site:developer.apple.com core data import performance

+0

merci, en lisant cela a aidé. étrange, je n'ai pas remarqué cette section quand je l'ai lu avant. – Marky

+1

@chris Wanger lien est mort, c'est pourquoi ppl besoin de plus d'explications dans leurs réponses pas seulement un lien mort. maintenant c'est inutile réponse acceptée – Aragunz

+1

Ouais, c'est un équilibre difficile entre régurgiter les docs d'Apple et les relier directement à eux. J'ai mis à jour la réponse. –

Questions connexes