Ho un attributo NSDate
chiamato startDate
memorizzato nell'archivio di persistenza nel seguente formato (immagine sotto).iOS: NSPredicate usando NSDate per confrontare
426.174.354 = 4 luglio 2014
Ho bisogno di creare (3) NSFetchRequest
usando predicati.
Per startDate
:
fetchRequest1
utilizzando predicato (s) necessario per andare a prendere tutto ciò che cade in data odierna in base al tempo dispositivo dell'utente.fetchRequest2
utilizzando i predicati è necessario recuperare tutto ciò che è nel passato, ovvero ieri e prima, in base al tempo del dispositivo dell'utente.fetchRequest3
utilizzando i predicati è necessario recuperare tutto ciò che è in futuro, ovvero a partire da domani e in seguito, in base al tempo del dispositivo dell'utente.
Di seguito è il codice che ho finora:
-(NSMutableArray *)getFetchPredicate:(NSUInteger)fetchRequestType
{
NSDate *now = [self getcurrentTime:[NSDate date]];
NSDateFormatter *format = [[NSDateFormatter alloc] init];
format.dateFormat = @"dd-MM-yyyy";
format.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
NSString *stringDate = [format stringFromDate:now];
NSDate *todaysDate = [format dateFromString:stringDate];
//today's date is now a date without time.
NSMutableArray *subpredicates;
if (fetchRequestType == 1)
{
NSPredicate *subPredToday = [NSPredicate predicateWithFormat:@"startDate == %@ ", todaysDate];
[subpredicates addObject:subPredToday];
}
else if (fetchRequestType == 2)
{
NSPredicate *subPredPast = [NSPredicate predicateWithFormat:@"startDate < %@", todaysDate];
[subpredicates addObject:subPredPast];
}
else if (fetchRequestType == 3)
{
NSPredicate *subPredFuture = [NSPredicate predicateWithFormat:@"startDate > %@", todaysDate];
[subpredicates addObject:subPredFuture];
}
return subPredicates;
}
-(NSDate *)getcurrentTime:(NSDate*)date
{
NSDate *sourceDate = date;
NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];
NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate];
NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate];
NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset;
NSDate* deviceDateWithTime = [[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate];
return deviceDateWithTime;
}
Il codice di cui sopra non è andare a prendere gli oggetti giusti da CoreData. Ho la sensazione che i miei pronostici per il confronto non siano corretti. Non sono sicuro di come convertire il tempo memorizzato in startDate
solo in formato data e applicarlo nei predicati per il confronto. Eventuali suggerimenti?
Nessuno dei tipi di richiesta di recupero restituisce risultati corretti? – spassas
No. Devo convertire la data memorizzata solo in data? – user1107173