У меня есть приложение, которое я написал, которое раньше работало отлично.Существует новое требование, что все данные должны быть зашифрованы сейчас, поэтому я реализовал шифрование, сделав все свои основные типы полей данных преобразовываемыми и записав собственные преобразователи для каждого типа данных, которые шифруют / дешифруют каждый элемент данных, когда они записываются / считываются изосновное хранилище данных.
Шифрование работает нормально, и я вижу все данные.Проблема в том, что сортировка, по-видимому, нарушена, как и любые даже немного сложные предикаты (те, которые включают подзапросы).
Я предполагаю, что сортировка выполняется по значениям до их отправки через преобразователь (а именно, сортировка выполняется по зашифрованным значениям).Есть ли способ, которым я могу обойти это?Я полагаю, я могу попробовать использовать дескриптор сортировки и указать свой собственный селектор, чтобы сделать сравнение и вначале явно расшифровать значения.Я опубликую здесь, если это сработает.
Ситуация с предикатами - еще большая проблема.Странно, что кажется, что это в основном работает, но затем перестает работать, когда я делаю подзапросы (которые похожи на соединения между двумя объектами в отношениях).Есть ли известная проблема при использовании преобразуемых значений и предикатов или, возможно, у меня есть ошибка в моих преобразователях?
Вот пример предиката, который больше не работает:
[NSPredicate predicateWithFormat:@"isdeleted == NO AND (SUBQUERY(appuserMessages, $am, $am.recAppUserID == %@ AND $am.isTrash == NO).@count > 0)", appuserid];
Предикатвыполняется для объекта Messages, который имеет отношение один ко многим с AppuserMessages.Предполагается, что этот предикат возвращает все сообщения, которые не были удалены и имеют по крайней мере одно appuserMessage, где recAppUserID равен appuserid, а isTrash - false.Раньше работал, но теперь ничего не возвращает.