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