3

私は問題に遭遇しました、私はそれを解決しました、しかしそれはかなり非効率的であると感じます、それは特定のエンティティに付けられたアイテムの量を数えるために親/子参照のコアデータ(iOS用)エンティティ階層を横断することを含みます。

具体的に説明します。私は2つのタイプのエンティティを持っています:CategoryAttachment

エンティティは、Category親/子の参照を介してリンクされます。Categories添付ファイルは、多対1(1つのカテゴリへの多数の添付ファイル)としてリンクされます。

特定の階層内にある添付ファイルの数をカウントしたい場合CategoryNSFetchRequestこれよりも効率的な方法はありますか?

NSInteger count = 0;

NSMutableArray *stack = [[NSMutableArray alloc] init];
[stack addObject:targetCategory];

while([stack count] > 0)
{
    Category *current = [stack lastObject];
    [stack removeLastObject];

    count += current.attachments.count;

    for (Category *cat in current.children)
    {
        [stack addObject:cat];
    }
}

targetCategory選択したルートカテゴリです。

前もって感謝します。

4

2 に答える 2

2

オブジェクトを数えるだけでよい場合はcountForFetchRequest:error:、次のように使用します。

NSError *err = nil;
NSUInteger count = [moc countForFetchRequest:request error:&err];
if(count == NSNotFound) {
  // Handle error
}

明らかに、@MartinRのアドバイスは引き続き有効です。

于 2013-02-18T22:29:06.397 に答える
0

(「それは不可能です」と答えるのは危険ですが)オブジェクトを再帰的にフェッチまたはカウントするフェッチ要求はないと確信しています。再帰的な方法で、または行ったように、階層をトラバースする必要があります。

于 2013-02-18T12:36:38.417 に答える