1

У меня NSFetchedResultsController, который возвращает объекты с атрибутом index, index атрибут является NSString и, например, у меня есть эти значения для атрибута index: -1, -3, 1, 0, -2, 3NSFetchedResultsController рода отрицательная строка значения

мне нужно определить NSSortDescriptor, который будет сортировать эти объекты, как это на основе значения атрибута index: -3, -2, -1, 0, 1, 3

Сортировка дескрипторов, что у меня сейчас, который не сортировать отрицательные значения правильно.

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:ObjectIndex ascending:YES selector:@selector(localizedStandardCompare:)]; 
+0

Ваш вопрос связан только с сортировкой чисел? Возможно, лучше изменить название и удалить nsfetchedresultsController. Вы пробовали: http://stackoverflow.com/questions/18510167/sorting-negative-and-positive-numbers-in-objective-c? Если он все еще не работает, пожалуйста, но результат, который вы получите, и весь код для сортировки вашего массива. – Paul

+0

связано с сортировкой чисел, сохраненных как свойство строки, когда объект извлекается с помощью NSFetchedResultsController. Существует разница с сортировкой массива и сортировкой при выполнении запроса sql. Насколько я знаю, нет возможного решения вопроса, который я задавал, но, возможно, кто-то знает трюк. Код, который я вам предоставил, достаточно для тех, кто знаком с этим вопросом. – zevonja

+0

, пожалуйста, не отвечайте так. Я пришел помочь. Многие проблемы могут быть решены по-другому, чем то, что думает ОП, например, сортировка массива после извлечения. Если это не то, что вы ищете, тогда просто скажите это, без горечи. – Paul

ответ

1

Согласно Apple Docs SQLite резервное хранилище CoreData поддерживает только несколько селекторов сортировки:

... В SQL-магазин, с другой стороны, составляет предикат и сортировки дескрипторов SQL и оценивает результат в самой базе данных. Это делается в первую очередь для производительности, но это означает, что оценка происходит в среде, отличной от Cocoa, и поэтому дескрипторы сортировки (или предикаты), которые полагаются на Cocoa, не могут работать. Поддерживаются сортировки селекторы сравнения: и caseInsensitiveCompare:, localizedCompare:, localizedCaseInsensitiveCompare: и localizedStandardCompare: (последний Finder, как сортировка, и то, что большинство людей должны использовать большую часть времени) ,

(мой подсветка). Ни один из них не достигает того, чего вы хотите. Как вы выяснили, последний из них близок: он сортирует отрицательные числа до положительного и делает попытку численного упорядочения (поэтому «23» сортируется до «220» - упорядочение текста поместило бы их наоборот). Но (странно) отрицательные числа сортируются по порядку их абсолютного значения - так что «-1» предшествует «-2» и т. Д. Разумеется, Finder сортирует отрицательные числа одинаково.

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

+0

Спасибо! Мне определенно нужно что-то изменить или избавиться от NSFetchedController. – zevonja