2010-09-20 5 views
4

J'utilise le code ci-dessous pour récupérer un ensemble interrogé de toutes les lignes en utilisant CoreData correspondant aux critères de recherche: itemType = 1. Mais ce que je dois faire est d'aller chercher un nombre spécifique de lignes aléatoires à partir des données à la place. Par exemple, au lieu de récupérer toutes les 100 lignes de données dans lesquelles le nom de colonne dataType = 1, j'ai besoin de 25 lignes au hasard dans lesquelles dataType = 1. J'espère qu'il y aura une solution relativement indolore. Toute aide est appréciée. lqRécupérer un nombre spécifique de lignes aléatoires à partir de CoreData

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 

[request setEntity:[NSEntityDescription entityForName:@"MyAppName" 
        inManagedObjectContext:[self managedObjectContext]]]; 

NSError *error = nil;           
NSPredicate *predicate; 
NSArray *fetchResults; 
predicate = [NSPredicate predicateWithFormat:@"(itemType = %i)", 1];    
[request setPredicate:predicate]; 
fetchResults = [managedObjectContext executeFetchRequest:request error:&error]; 

if (!fetchResults) { 
     // NSLog(@"no fetch results error %@", error); 
} 

self.mutableArrayName = [NSMutableArray arrayWithArray:fetchResults]; 
[request release]; 

Répondre

5

Vous ne pouvez pas réellement chercher des lignes aléatoires. Une stratégie de randomisation raisonnable peut être de récupérer tous les objets correspondant à votre prédicat, puis de sélectionner au hasard un nombre spécifique d'objets.

Quoi qu'il en soit, vous pouvez utiliser les méthodes suivantes de NSFetchRequest:

- (void)setFetchLimit:(NSUInteger)limit 
- (void)setFetchOffset:(NSUInteger)limit 

Fondamentalement, setFetchLimit vous permet de définir le nombre de lignes que vous voulez chercher (dans votre cas, vous définirez limite à 25), tandis que setFetchOffset définit le décalage auquel les lignes commenceront à être renvoyées (voir la documentation de la propriété fetchOffset pour plus de détails).

Ce n'est pas un processus aléatoire, mais vous pouvez générer le décalage de manière aléatoire. Cependant, il convient de noter ici qu'en fonction du décalage, vous pouvez récupérer un nombre d'objets compris entre zéro et votre limite de récupération.

Questions connexes