I ran into small problems, and I was wondering if anyone could give some recommendations.
I am trying to create section headers with the following order: ["Push", "Busy", "Finished", "Canceled"].
Unfortunately, this order cannot be implemented with a simple "upstream YES / NO" ... I need to add a custom comparison selector ... something like this ..:
** Where "states" are displayed in ["Push", "Busy", "Finished", "Canceled"]
NSSortDescriptor *sortStates = [NSSortDescriptor sortDescriptorWithKey:@"states" ascending:NO selector:@selector(compareCustom:)];
Therefore, I implemented "compareCustom" ... however, it turned out that I could not implement my own sorter as the following exception results:
*** Application termination due to an undetected exception "NSInvalidArgumentException", reason: "unsupported selector NSSortDescriptor: compareCustom:
For reference, sortDate is implemented:
request.sortDescriptors = @[sortStates] self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:@"states" cacheName:nil];
So, it looks like I cannot implement compareCustom, which returns NSComparisonResult? I feel it should be possible. But I canโt figure out how to do this. If anyone can give some advice, I would really appreciate it!
Also for reference, here is my compareCustom method
-(NSComparisonResult)compareCustom:(NSString *)anotherState { if ([(NSString *)self isEqualToString:@"Push"] && [anotherState isEqualToString:@"Canceled"]) { return NSOrderedDescending; } else if ([(NSString *)self isEqualToString:@"Push"] && [anotherState isEqualToString:@"Busy"]) { return NSOrderedDescending; } else if ([(NSString *)self isEqualToString:@"Push"] && [anotherState isEqualToString:@"Finished"]) { return NSOrderedDescending; } else if ([(NSString *)self isEqualToString:@"Push"] && [anotherState isEqualToString:@"Push"]) { return NSOrderedSame; } else if ([(NSString *)self isEqualToString:@"Finished"] && [anotherState isEqualToString:@"Canceled"]) { return NSOrderedDescending; } else if ([(NSString *)self isEqualToString:@"Finished"] && [anotherState isEqualToString:@"Busy"]) { return NSOrderedAscending; } else if ([(NSString *)self isEqualToString:@"Finished"] && [anotherState isEqualToString:@"Finished"]) { return NSOrderedSame; } else if ([(NSString *)self isEqualToString:@"Finished"] && [anotherState isEqualToString:@"Push"]) { return NSOrderedAscending; } else if ([(NSString *)self isEqualToString:@"Busy"] && [anotherState isEqualToString:@"Finished"]) { return NSOrderedDescending; } else if ([(NSString *)self isEqualToString:@"Busy"] && [anotherState isEqualToString:@"Canceled"]) { return NSOrderedDescending; } else if ([(NSString *)self isEqualToString:@"Busy"] && [anotherState isEqualToString:@"Busy"]) { return NSOrderedSame; } else if ([(NSString *)self isEqualToString:@"Busy"] && [anotherState isEqualToString:@"Push"]) { return NSOrderedAscending; } else { return NSOrderedSame; } }
ios objective-c core-data
user330739
source share