私が作成したアプリケーションは、以前は完全に正常に機能していました。すべてのデータを暗号化する必要があるという新しい要件があるため、すべてのコア データ フィールドの型を変換可能にし、データ型ごとにデータの各要素を暗号化/復号化するカスタム トランスフォーマーを記述して暗号化を実装しました。コア データ ストア。
暗号化は正常に機能し、すべてのデータを確認できます。問題は、少し複雑な述語 (サブクエリを含むもの) と同様に、並べ替えが壊れているように見えることです。
値がトランスフォーマーを介して送信される前に、値に対して並べ替えが行われていると思います (つまり、暗号化された値に対して並べ替えが行われています)。これを回避する方法はありますか?ソート記述子を使用して、独自のセレクターを指定して比較を行い、最初に値を明示的に復号化できると思います。それが機能する場合は、ここに投稿します。
ただし、述語の状況はより大きな問題です。ほとんどが機能しているように見えますが、サブクエリを実行すると失敗するのは奇妙です (これは、関係にある 2 つのオブジェクト間の結合のようなものです)。変換可能な値と述語を使用する際に既知の問題はありますか、それとも変換プログラムにバグがあるのでしょうか?
機能しなくなった述語の例を次に示します。
[NSPredicate predicateWithFormat:@"isdeleted == NO AND (SUBQUERY(appuserMessages, $am, $am.recAppUserID == %@ AND $am.isTrash == NO).@count > 0)", appuserid];
述語は、AppuserMessages と 1 対多の関係を持つ Messages オブジェクトに対して実行されます。この述語は、isdeleted ではなく、recAppUserID が appuserid で isTrash が false である appuserMessage が少なくとも 1 つあるすべてのメッセージを返すことになっています。以前は機能していましたが、現在は何も返されません。