8

のための一時属性で[OK]を、私は最初に私のNSManagedObjectサブクラス内のプロパティに基づいてソートするNSFetchedResultsControllerの要求のNSSortDescriptorを作りたかったのですが、NSFetchedResultsControllerが述語に制限され、ソートので、それは明らかに、それを行うことはありません私がデータモデルで一時的な属性を作成し、この属性のプロパティを合成してNSManagedObjectサブクラスにivarし、それに基づいてソートすることにしました。それを実行しているとき、私は、これはKVOの問題である知っているので、私は+ (NSSet*)keyPathsForValuesAffectingIsActiveを追加したが、それでも同じ問題を持っている'NSInvalidArgumentException', reason: 'keypath isActive not found in entity <NSSQLEntity SMSourceEntity id=2>'NSSortDescriptorがNSFetchedResultsController

をフェッチ実行中

、私は得ました。

私は何が間違っていたのですか、それとも私のキーパスを見つけるために何かが欠けていますか?ありがとう。

コード:

@implementation SMSourceEntity 

@dynamic friendlyName; 
@dynamic interfaceAddress; 
@dynamic uniqueID; 
@dynamic network; 
@synthesize isActive = _isActive; 

+ (NSSet*)keyPathsForValuesAffectingIsActive 
{ 
    return [NSSet setWithObject:@"isActive"]; 
} 

@end 

私sortDescriptor:

request.sortDescriptors = [NSArray arrayWithObjects:[NSSortDescriptor sortDescriptorWithKey:@"isActive" ascending:NO] , nil]; 

答えて

16

それはFRCは、ソートができることを必要とするので、それはあなたが何をしようとしての問題だ、KVO問題ではありません基礎となるSQLiteストアに適用されます。言い換えれば、非過渡属性のフィルタリングとソートのみが可能です。値がストアに保存され、SQLiteで使用できるように、属性を非一時的にする必要があります。

FRCの場合、セクション名キーパス属性のみが一時的になります。

+0

私は一時的なプロパティを自分のFRCで動作させたい場合は、サブクラス化してフェッチされた結果を取得し、didChangeContentのプロパティに基づいてフェッチされたオブジェクトの配列をソートする必要があります。それは理にかなっていますか? – ambientlight

+1

多くのコードを書いたり、FRCを使うことのメリットのほとんどを捨てなければならないので(これは、ページ指定されたオンデマンドローディングのように)、非常に難しいと思います。おそらく、ケースバイケースで他のオプションを考慮する必要があります。さまざまなセクションやそのようなものに複数のFRCを使うのと同じです。 – Wain

+0

完璧に感謝します、ありがとう。 – ambientlight

関連する問題