Сортировка результатов Realm по нечувствительному к регистру свойству

Я сортирую свои результаты по свойству под названием «алфавит» следующим образом:

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

Как я могу сортировать без учета регистра? Сейчас "полицейский" появится перед "Котом".


person codeman    schedule 27.02.2015    source источник
comment
который не поддерживается областью, вам нужно будет сделать этот обычай. Лучший способ, вероятно, похож на то, что описал Velthune, поэтому вы будете создавать новый NSArray, который правильно отсортирован.   -  person yoshyosh    schedule 03.03.2015


Ответы (2)


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

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

Где customCompare — это метод вашего объекта:

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

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

sortedArray = [array sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
person Luca Davanzo    schedule 27.02.2015

Если вы хотите сохранить преимущества использования объекта 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)
person Ronald Martin    schedule 01.07.2015