В моем NSFetchedResultsController я установил sortDescriptor, который сортирует на основе свойства date моих управляемых объектов. Проблема, с которой я столкнулся (наряду с несколькими другими, согласно Google), состоит в том, что значения nil сортируются в самом раннем конце, а не в самом конце спектра дат. Я хочу, чтобы мой список сортировался раньше, раньше, сейчас, позже, позже, ноль. Насколько я понимаю, эта сортировка выполняется на уровне базы данных в SQLite, и поэтому я не могу создать свой собственный метод сравнения: для предоставления нужной сортировки.
Я не хочу вручную сортировать в памяти, потому что мне пришлось бы отказаться от всех преимуществ NSFetchedResultsController. Я не могу сделать составную сортировку, потому что sectionNameKeyPaths тесно связаны с диапазонами дат. Я мог бы написать подпрограмму, которая перенаправляет запросы indexPath так, чтобы секция 0 в контроллере результатов была сопоставлена с последней секцией tableView, но я боюсь, что это добавит много накладных расходов, серьезно увеличит сложность моего кода и будет очень, очень подвержен ошибкам.
Самая последняя идея, которую я рассматриваю, состоит в том, чтобы сопоставить все ноль дат с самым дальнейшим датой, которую поддерживает NSDate. Мой левый мозг ненавидит эту идею, так как это больше похоже на взлом. Это также потребует немного усилий для реализации, так как проверка на нулевые факторы в значительной степени влияет на то, как я обрабатываю даты в моем приложении. Я не хочу идти по этому пути без предварительной проверки лучших вариантов. Кто-нибудь может придумать лучший способ обойти эту проблему?
Обновление
Возможно, лучший способ обойти эту проблему - переключиться на двоичное постоянное хранилище. Из того, что я прочитал в документации, сортировка выполняется в Objective-C с двоичным постоянным хранилищем, поэтому я мог предоставить свой собственный метод сравнения для сортировки по дате. У меня есть две проблемы с этим подходом. Во-первых, какой удар по производительности я собираюсь увидеть, перейдя в бинарный магазин? Во-вторых, насколько сложно будет развернуть это изменение в обновлении приложения?