iOS: NSPredicate mit NSDate zu vergleichen

Ich habe eine NSDate Attribut namens startDate im persistenten Speicher gespeichert werden im folgenden format (Bild unten).

iOS: NSPredicate mit NSDate zu vergleichen

426174354 = Juli 04, 2014

Muss ich erstellen (3) NSFetchRequest mit Prädikaten.

Für startDate:

  1. fetchRequest1 mit Prädikat(s) müssen Sie Holen alles das fällt in der heutigen Datum basierend auf dem Gerät des Benutzers Zeit.
  2. fetchRequest2 mit Prädikat(s) müssen Sie Holen alles, was in der Vergangenheit, Bedeutung gestern und vor, basierend auf dem Gerät des Benutzers Zeit.
  3. fetchRequest3 mit Prädikat(s) müssen Sie Holen alles, was in die Zukunft, d.h. ab morgen, und nach, basierend auf dem Gerät des Benutzers Zeit.

Unten ist der code, den ich bisher:

-(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;
}

Den code oben ist nicht das abrufen der richtigen Objekte aus CoreData. Ich habe das Gefühl mein Prädikaten zum Vergleich sind falsch. Ich bin mir nicht sicher, wie Sie Sie konvertieren, die gespeicherte Zeit in startDate nur Datum-format und anzuwenden, die in Prädikaten für den Vergleich. Irgendwelche Vorschläge?

  • Keine der fetch-Anfrage-Typen gibt die richtigen Ergebnisse?
  • NÖ. Brauche ich zum konvertieren gespeicherte Datum nur Datum nur?
InformationsquelleAutor user1107173 | 2014-07-02
Schreibe einen Kommentar