2011-06-27 6 views
1

J'ai la recherche suivante. Je veux récupérer l'objet Session pour lequel le prédicat est vrai.Besoin d'aide avec NSFetchRequest

Quelqu'un peut-il me dire si je fais cela correctement. Et comment puis-je init/définir indexPath, car il n'est pas reconnu.

NSDate * searchDate = [formatter dateFromString:dateString]; 
NSFetchRequest *request = [[NSFetchRequest alloc]init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Session" inManagedObjectContext:self.managedObjectContext]; 
[request setEntity:entity]; 
NSPredicate * predicate1 = [NSPredicate predicateWithFormat:@" timeStamp == %@ ", searchDate]; 
[request setPredicate: predicate1]; 
[request setFetchBatchSize:20]; 
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"timeStamp" ascending:NO]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 
[request setSortDescriptors:sortDescriptors]; 
NSError *error = nil; 
NSArray *array = [managedObjectContext executeFetchRequest:request error:&error]; 

SessionViewController *sessionViewController = [[SessionViewController alloc] initWithNibName:@"SessionViewController" bundle:nil]; 
self.selectedSession = (Session *)[array objectAtIndexPath:indexPath]; 

sessionViewController.selectedSession = self.selectedSession; 

[self.navigationController pushViewController:sessionViewController animated:YES]; 
[sessionViewController release]; 
[sortDescriptor release]; 
[request release]; 
[sortDescriptors release]; 

Répondre

0

Ensuite la variable indexPath est généralement fournie par un rappel tableview delegate/datasource. Les deux dernières lignes de code fournies doivent être placées dans l'une des méthodes suivantes si vous utilisez un UITableView.

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath 
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath 

Les autres lignes devraient être dans une méthode pour obtenir vos données à afficher dans la tableview.

-(NSArray*)sessionData 
{ 
    if(!_sessionData) 
    { 
     //FetchRequest stuff 
     NSError *error = nil; 
     _sessionData = [managedObjectContext executeFetchRequest:request error:&error]; 
     //Error checking/logging 
    } 
    return _sessionData; 
} 

Maintenant, le suivant @ "timeStamp ==% @" ne fonctionnera que si l'horodatage est cette date EXACT à la milliseconde. Si c'est ce que vous voulez, sinon utilisez une plage de dates @ "timeStamp> =% @ AND timeStamp < =% @".

Note: Vos communiqués manquants sur plusieurs objets si vous avez posté tous votre code

demande
sortDescriptor
sortDescriptors

+0

Merci, Joe, j'utilise acutally ce code avecun Calendrier et le titre de la méthode est '- (void) calendarMonthView: (TKCalendarMonthView *) monthView didSelectDate: (NSDate *) d'. Je ne sais pas trop comment utiliser correctement cette méthode. – Jon

+0

Est-il possible de plusieurs sessions pour une date? Si oui, comment affichez-vous les multiples sessions? – Joe

+0

Non, lorsque des sessions sont créées, elles ne doivent pas avoir plus de 1 pour 1 date. Aucun objet de session 2 n'a la même date. (jour) – Jon

Questions connexes