2015-02-27 8 views
3

Я сортировка моих результатов по свойству называется «алфавит», как это:результатов Сортировать Realm по делу нечувствительной собственности

allArtists = Artist.allObjects().sortedResultsUsingProperty("alphabet", ascending: true) 

Как я могу сортировать с чехлом нечувствителен? Прямо сейчас «Коп» появится перед «Котом».

+0

, который не поддерживается области, вы должны сделайте это обычай. Лучший способ, вероятно, похож на то, что описано в Velthune, поэтому вы будете строить новый NSArray, который будет отсортирован правильно – yoshyosh

ответ

1

Как правило, вы должны написать пользовательский сравнить метод:

sortedArray = [array ArrayUsingSelector:@selector(customCompare:)]; 

Где customCompare является метод вашего объекта:

- (NSComparisonResult)customCompare:(NSString*)string { 
    return [[string lowercaseString] compare:[self.string lowercaseString]]; 
} 

В вашем случае это просто:

sortedArray = [array sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; 
3

Если вы хотите сохранить преимущества использования объекта RLMResults, другой способ сделать это: добавить регистронезависимую копию собственности на модели:

class Artist: RLMObject { 
    /// Some original property you want to sort by 
    dynamic var name = "" { 
     didSet { 
      // Keep the case-free property in sync 
      lowercaseName = name.lowercaseString 
     } 
    } 

    /// A new property just for case-insensitive sorting 
    dynamic var lowercaseName = "" 
} 

Затем вы можете отсортировать по новому свойству вместо:

let caseInsensitiveArtists = Artist.allObjects() 
    .sortedResultsUsingProperty("lowercaseName", ascending: true)