6

Ich versuche, nach Datum zu sortieren, dann Zeit zu starten. Startzeit ist Minuten ab Mitternacht. Wenn also die Startzeit < ist, wird 100 nicht richtig sortiert.NSSortDescriptor sortiert ganze Zahlen nicht korrekt

- (NSFetchedResultsController *)fetchedResultsController { 

    if (fetchedResultsController != nil) { 
     return fetchedResultsController; 
    } 

    /* 
    Set up the fetched results controller. 
    */ 
    // Create the fetch request for the entity. 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    // Edit the entity name as appropriate. 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Appointments" inManagedObjectContext:[[DataManager sharedInstance] managedObjectContext]]; 
    [fetchRequest setEntity:entity]; 
    [fetchRequest setIncludesPendingChanges:YES]; 

    // Set the batch size to a suitable number. 
    //[fetchRequest setFetchBatchSize:20]; 

    // Sort using the date/then time property. 
    NSSortDescriptor *sortDescriptorDate = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES]; 
    NSSortDescriptor *sortDescriptorTime = [[NSSortDescriptor alloc] initWithKey:@"start_time" ascending:YES]; 
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptorDate, sortDescriptorTime, nil]; 


    [fetchRequest setSortDescriptors:sortDescriptors]; 

    // Use the sectionIdentifier property to group into sections. 
    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:[[DataManager sharedInstance] managedObjectContext] sectionNameKeyPath:@"date" cacheName:@"List"]; 
    aFetchedResultsController.delegate = self; 
    self.fetchedResultsController = aFetchedResultsController; 
    NSLog(@"FetchedController: %@", fetchedResultsController); 
    return fetchedResultsController; 
} 

Wie könnte ich diese Ganzzahlen richtig machen?

+0

Ich * hoffe * Ihre start_time (in Ihrem Core Data-Objektmodell) ist ein NSNumber-Objekt und keine Zeichenfolge. –

Antwort

27

Wenn START_TIME ist eine Zeichenfolge, dann wird es alphabetisch sortiert werden, was bedeutet, dass aa ist vor b was auch bedeutet, dass 11 vor 2 ist.

Um eine benutzerfreundlichere Art zu sortieren, verwenden Sie localizedStandardCompare: als Selektor.

[NSSortDescriptor sortDescriptorWithKey:@"start_time" ascending:YES selector:@selector(localizedStandardCompare:)] 
+0

Das war es! Vielen Dank. Ich habe es in meinen Kerndaten als String, weil es von der API als String und nicht als Zahl kommt. – Bot

+2

das ist genial. genau das was ich gesucht habe. Ich hatte das Problem, dass meine Saitensäule auf diese Weise sortiert wurde 1,10,11,2,3,4 ... über Lösung löste es. – shaikh

+0

NSSortDescriptor * descriptor = [NSSortDescriptor sortDescriptorWithKey: @ "dateTimeInSec" aufsteigend: YES selector: @selector (localizedStandardCompare :)]; Absturz meiner App Ist die start_time ein Typ NSString-Attribut oder NSNumber? Der Fehler war - [__ NSCFNumber localizedStandardCompare:]: Unerkannter Selektor wurde an Instanz 0x16dc40c0 mit userInfo (null) gesendet – coolcool1994