2017-08-24 9 views
1

NSManagedObjectは、(変換可能な)NSArrayプロパティarrayPropertyを持っています。配列プロパティサイズに基づくNSFetchRequest

IはUnsupported function expression countUnsupported function [SIZE]を与える(私は

[NSPredicate predicateWithFormat:@"[email protected] <= 5"] 

[NSPredicate predicateWithFormat:@"arrayProperty[SIZE] <= 5"] 

を試みたが、それらのどれも動作しないそのプロパティサイズ5未満であるオブジェクトのフィルタリングフェッチ要求を実行したいです)。

これを達成する方法はありますか?

+1

変換ストアがblobとして格納されている場合、CoreDataはBLOBを解析できるSQL where句に変換できません。すべてをフェッチしてメモリにフィルタリングするか、配列を実際に多対多の関係としてモデル化するかどうかを検討します。 – pbasdf

答えて

2

変換可能なプロパティでは、このようなことはできません。 Transformableはデータを格納するのに便利ですが、一旦格納されると、それらはすべて作成されたデータ構造に関する情報のない一連のバイトです。 SQLiteはそれが配列であることを知らないので、配列内にいくつの項目があるのか​​といったようなことはできません。

変換可能なプロパティを使用する場合は、値がnilかどうかのような極端な基本的なテストを除き、変換可能なプロパティを基にフィルタリングする能力が失われます。

このようなフィルタリングが必要な場合は、データモデルを変更する方法を検討する必要があります。 1つの可能性は、配列を保存する代わりに、値を格納するために多対多の関係を持つ新しいエンティティを作成することです。

+0

ありがとうございました。これは私が思っていたものだが、どこにも述べられていない。私のモデルにNSNumber * arrayCountを追加します... – vib

関連する問題