2017-07-17 4 views
1

Lorsque je tente d'aller chercher plus de 1000 NSManagedObjects de Core Data, plantage de mon application avec ce message:accident de données de base lors de la récupération de plus de 1000 objets

error: (1) I/O error for database at .../Documents/Stores/Model.sqlite. 
SQLite error code:1, 'Expression tree is too large (maximum depth 1000)' 
CoreData: error: (1) I/O error for database at .../Documents/Stores/Model.sqlite. 
SQLite error code:1, 'Expression tree is too large (maximum depth 1000)' 

Le code que j'utilise pour récupérer les objets sélectionnés par l'utilisateur est la suivante:

NSManagedObjectContext *context = cdh.context; 
NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Spot" inManagedObjectContext:context]; 
NSError *error = nil; 
[request setEntity:entity]; 
request.includesPropertyValues = NO; 

NSMutableArray *subPredicatesArray = [NSMutableArray array]; 

for (NSString *string in uuidStrings) 
{ 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K like %@", @"sID", string]; 
    [subPredicatesArray addObject:predicate]; 
} 

NSCompoundPredicate *compoundPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:subPredicatesArray]; 
[request setPredicate:compoundPredicate]; 

NSArray *fetchedObjects = [context executeFetchRequest:request error:&error]; 

y at-il une meilleure façon de chercher des objets 1000 qui ne causeront pas mon application crash?

+1

Je ne savais pas cette limite. :) –

+0

Moi non plus jusqu'à ce que je me heurte à ça! – EmilyP

Répondre

5

En supposant que le uuidStrings contiennent des correspondances exactes pour l'attribut sID, vous devriez être en mesure de remplacer le code avec ce (non testé):

// remove subPredicatesArray, the loop and compoundPredicate 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"sID IN %@", uuidStrings]; 
[request setPredicate:predicate]; 
+0

Cela a fait fonctionner et courir beaucoup plus vite! Je ne sais pas comment je suis arrivé à utiliser le prédicat composé à la place du prédicat que vous avez suggéré, mais cela a tout arrangé! – EmilyP