1

私は親子<-->>関係を持っています(対多)。そして、関係は私がすべての子をフェッチする必要があるときです、Parent.children = (NSSet *) child(s)

子エンティティのtimeStamp属性に基づいて、最新のエンティティを1つだけ必要とする場合があります。

フェッチ要求を作成してフェッチ制限1を設定し、ソート記述子を使用してtimeStampに基づいて順序付けるよりも簡単に、フェッチする最も簡単な方法を探していました。

もっと簡単な方法はありますか?多分電話するだけです:

[Parent.children firstObject];

その理由は、アプリの存続期間中、何度も取得する必要があるためです。場合によっては、..内の最新の子エンティティをフェッチする必要がありますが、その-(void)awakeFromFetch() of a Parent Entityため、特にメモリの観点から、他の何よりも簡単な方法が必要でした。


子エンティティをフェッチするとき、この述語を使用して、2つ以上の親エンティティの子であるそれらの束をフェッチします。

NSPredicate *pred = [NSPredicate predicateWithFormat:@"forParent IN %@", [Array of Parents]];

結果のNSSetから、上記のオブジェクトに必要なすべての子エンティティを取得するので、 timeStamp属性(NSDate)に従って最新の子へのポインターを割り当てることができれば非常に便利です。

明らかに、NSSetの結果を取得した後、各子を反復処理して、NSSetで見つけた最新のエンティティへのポインターを割り当てることができますが、の最新のエンティティへのポインターを1つだけ割り当てる必要がありますが、かなり骨の折れる作業に見えます。特定の、100を超えるエンティティを持つ可能性のあるNSSetを繰り返すようbad programmingです。

何か案は?

4

1 に答える 1

1

いくつかのオプションがあります。fetchLimit = 1のフェッチ要求は、時間でソートされていますが、実際には悪いオプションではありません。モデルGUIでタイムスタンプフィールドをINDEXにすることもでき、ルックアップは非常に高速になります。

データベースが絶えず変化し、常に最新のアイテムにアクセスしたい場合は、NSManagedObjectContextでDidSave通知に登録することを検討してください。

コンテキストが保存されたとき(またはオブジェクトに変更があったときでも)に呼び出される可能性があります。通知方法では、挿入されたアイテムを確認し、更新して最新の値を取得します。

挿入されたオブジェクトを検索し、タイムスタンプが最大の一致するエンティティを取得できます。

保存とオブジェクト変更の通知は次のとおりです。

NSManagedObjectContextDidSaveNotification NSManagedObjectContextObjectsDidChangeNotification

于 2012-05-15T01:27:26.457 に答える