Skip to content

Instantly share code, notes, and snippets.

@masakih
Created June 8, 2009 06:21
Show Gist options
  • Select an option

  • Save masakih/125665 to your computer and use it in GitHub Desktop.

Select an option

Save masakih/125665 to your computer and use it in GitHub Desktop.
// NSString から NSSortDescriptor の NSArrayを生成
//
// @"sortDescriptorsBynameDESCANDcharacterDOTname"
// を受けて、name(DESC) と character.name の二つからなるそれを返す。
NSString *sortDesctiptorsBy = @"sortDescriptorsBy";
- (id)sortDescriptorsFromString:(NSString *)keysString
{
NSArray *keys;
NSString *aKey;
NSMutableArray *result = [NSMutableArray array];
keysString = [keysString stringByReplacingOccurrencesOfString:@"DOT"
withString:@"."];
keys = [keysString componentsSeparatedByString:@"AND"];
for(aKey in keys) {
BOOL ascending = YES;
if([aKey hasSuffix:@"DESC"]) {
ascending = NO;
aKey = [aKey substringToIndex:[aKey length] - 4/* length of DESC */];
}
NSSortDescriptor *s = [[[NSSortDescriptor alloc] initWithKey:aKey
ascending:ascending] autorelease];
[result addObject:s];
}
return result;
}
- (id)valueForKey:(NSString *)key
{
if([key hasPrefix:sortDesctiptorsBy]) {
NSUInteger prefixLength;
NSUInteger length;
NSString *sortKeys;
length = [key length];
prefixLength = [sortDesctiptorsBy length];
if(prefixLength == length) goto end;
sortKeys = [key substringFromIndex:prefixLength];
return [self sortDescriptorsFromString:sortKeys];
}
end: return [super valueForKey:key];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment