2016-02-24 2 views
5

У меня следующий код для выборки и группировки результатов поиска:Может ли NSFetchRequest propertiesToGroupBy быть нечувствительным к регистру?

NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Song"]; 
[request setPredicate:[NSCompoundPredicate andPredicateWithSubpredicates:predicates]]; 
[request setResultType:NSDictionaryResultType]; 
[request setSortDescriptors: @[[NSSortDescriptor sortDescriptorWithKey:@"timestamp" ascending:YES]]]; 

NSExpression *countExpression = [NSExpression expressionWithFormat:@"count:(SELF)"]; 
NSExpressionDescription *expressionDescriprion = [[NSExpressionDescription alloc] init]; 
[expressionDescriprion setName:@"count"]; 
[expressionDescriprion setExpression:countExpression]; 
[expressionDescriprion setExpressionResultType:NSInteger64AttributeType]; 

NSArray *properties = @[@"artistName", @"songName"]; 
[request setPropertiesToFetch:[properties arrayByAddingObject:expressionDescriprion]]; 
[request setPropertiesToGroupBy:properties]; 

self.fetchedItems = [self.managedObjectContext executeFetchRequest:request error:nil]; 

, который работает очень хорошо, но я столкнулся выдавать и вид stucked с, так мне нужно сделать это propertiesToGroupBy (тип свойство NSString *) случай нечувствительный как-то. На данный момент я следующий вывод:

<_PFArray 0x7fa3e3ed0d90>(
{ 
    artistName = "System of a Down"; 
    count = 44; 
    songName = "Lonely Day"; 
}, 
{ 
    artistName = "System Of A Down"; 
    count = 2; 
    songName = "Lonely Day"; 
}, 
{ 
    artistName = "System of a Down"; 
    count = 4; 
    songName = "Chop Suey"; 
} 
) 

, который является некорректным, так что мне нужно первые 2 пунктов, чтобы быть в одной секции, причиной этого является тот же художник.

Есть ли способ достичь этого?

ответ

0

Попробуйте использовать NSExpressionDescription:

NSExpression *artistKeyPathExpression = [NSExpression expressionForKeyPath:@"artistName"]; 
NSExpression *artistExpression = [NSExpression expressionForFunction:@"uppercase:" arguments:@[artistKeyPathExpression]]; 
NSExpressionDescription *artistExpressionDescription = [NSExpressionDescription new]; 
artistExpressionDescription.name = @"groupByArtist"; 
artistExpressionDescription.expression = artistExpression; 
artistExpressionDescription.expressionResultType = NSStringAttributeType; 

NSExpression *songKeyPathExpression = [NSExpression expressionForKeyPath:@"songName"]; 
NSExpression *songExpression = [NSExpression expressionForFunction:@"uppercase:" arguments:@[songKeyPathExpression]]; 
NSExpressionDescription *songExpressionDescription = [NSExpressionDescription new]; 
songExpressionDescription.name = @"groupBySongName"; 
songExpressionDescription.expression = songExpression; 
songExpressionDescription.expressionResultType = NSStringAttributeType; 

[request setPropertiesToGroupBy:@[artistExpressionDescription, songExpressionDescription]]; 

Пожалуйста, обратите внимание, что я не могу проверить этот код прямо сейчас в XCode, так что он может содержать опечатки. Извините, но я думаю, что основной момент ясен.

+0

Это кажется невозможным для группы по NSExpressionDescription для меня. После [запроса setPropertiesToGroupBy: myExpressions]; У меня всегда есть «NSInvalidArgumentException», причина: «Недопустимое выражение для ключевого слова – iiFreeman