Ich habe eine Spalte in core data
, die ein Datum (eg:2006-01-26)
speichert. Ich benutzte ein Array, um alle Jahre zu speichern, indem ich NSDateComponents
auf diesen gespeicherten Daten verwendete (Beispiel: am obigen Datum, wenn ich NSDateComponents
verwende, bekomme ich 2006 als ein Jahr). Diese Jahre sind NSNumbers
, und mit ihnen in meinem Prädikat möchte ich die Spalte holen, die NSDate
mit allen Date-Komponenten ist. Und abgeholte Aufzeichnungen sollten nur ein bestimmtes Jahr sein. Ich bin jetzt verwirrt darüber, wie ich ein Jahr Komponenten mit einem dieser in Array, und Prädikat erstellen könnte.Wie verwendet man NSPredate zum Abrufen von Eigenschaften mit NSDate-Typ?
- (void)viewDidLoad
{
[super viewDidLoad];
NSFetchRequest *request = [[NSFetchRequest alloc]init];
NSError *error;
//AppDelegate *app = [[UIApplication sharedApplication]delegate];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Movies" inManagedObjectContext:self.managedObjectContxt];
[request setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]
initWithKey:@"releaseDate" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor,nil];
[request setSortDescriptors:sortDescriptors];
//[request setReturnsDistinctResults:YES ];
// [request setEntity:entity];
[sortDescriptors release];
[sortDescriptor release];
[request setPropertiesToFetch:[NSArray arrayWithObject:@"releaseDate"]];
NSMutableArray *arrOfdMovies = [[self.managedObjectContxt executeFetchRequest:request error:&error]mutableCopy];
[self setArrOfFetchdMovies:arrOfdMovies];
arrOfDistinctYr = [[NSMutableArray alloc]init];
NSMutableArray *temp = [[NSMutableArray alloc]init];
for (int i = 0; i<[arrOfdMovies count]; i++) {
// NSLog(@"%@",[[arrOfdMovies objectAtIndex:i] valueForKey:@"releaseDate"]);
//date to its components
NSDate *now = [[arrOfdMovies objectAtIndex:i]valueForKey:@"releaseDate"];
// Specify which units we would like to use
unsigned units = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *component_s = [calendar components:units fromDate:now];
NSInteger year = [component_s year];
NSLog(@"%i", year);
// NSInteger month = [components month];
// NSInteger day = [components day];
NSNumber *num= [NSNumber numberWithInteger:year];
[temp addObject:num];
}
[self setArrOfDistinctYr:temp];
//distinct value logic.
NSSet *uniqueYrs = [NSSet setWithArray:arrOfDistinctYr];
arr = [[NSArray alloc]initWithArray:[uniqueYrs allObjects]];
//sorting
NSArray *ar = [arr sortedArrayUsingSelector:@selector(compare:)];
self.arr = ar;
[self.managedObjectContxt retain];
[request release];
}
das Array "ar" enthält nur Jahre in unterschiedlicher und sortierter Weise. Aber Datentypen dieser Array-Elemente sind "NSNumbr" Jetzt Wie kann ich ein Prädikat bilden, die dieses Array verwenden wird, um Datensätze für das jeweilige Jahr anzuzeigen (wie Jahr von Datum-Feld der Kerndaten zu überprüfen 2006-01-26]). Ich habe versucht, in folgenden Weise -
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// return 2;
NSFetchRequest *requst=[[NSFetchRequest alloc]init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Movies" inManagedObjectContext:self.managedObjectContxt];
[requst setEntity:entity];
requst.predicate = [NSPredicate predicateWithFormat:@"releaseDate CONTAINS%@", [arr objectAtIndex:section]];
NSError *error = nil;
NSMutableArray *array = [[self.managedObjectContxt executeFetchRequest:requst error:&error]mutableCopy];
[requst release];
return [array count];
}
Sobald ich das bekommen, ich Aufzeichnungen n meine Viewcontroller anzeigen kann.
ein Code bitte ..... – iamsult
Ich bin neu hier. Kannst du mir sagen, wie man Code anbringt? – PriyankaJ
Sie können Ihren Code kopieren und in Ihre Frage einfügen. Markieren Sie dann Ihren Code und klicken Sie auf die Schaltfläche {}. Es befindet sich direkt über dem Textfeld, in das Sie Ihre Frage eingeben. Dadurch wird der markierte Bereich eingerückt und ein Code angezeigt. – Linger