0

私のコアデータエンティティ「本」には、本が「閲覧」されたかどうかを示すブールプロパティ「wasViewed」(NSNumber numberWithBool)があります。

すべての NSManagedObjects 「ブック」に対して、このプロパティを一種の「リセット」を実装したいと思います。セッション間でそれらをすべて NO に設定できるようにします。NSPredicate を使用して、次のようにすべての本を取得します。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"wasViewed == %@", [NSNumber numberWithBool:YES]];

// code for setting entity, request etc...

NSMutableArray *mutableFetchResults = [[[managedObjectContext executeFetchRequest:request error:&error] mutableCopy] autorelease];

これは問題なく動作していますが、次のようなループを設定し、各 Book オブジェクトを処理する必要があります。

for(Book *b in mutableFetchResults) {

    [b setWasViewed:NO]
}

述語を取得する代わりに、述語に適合する各要素に対してアクションを実行する方法はありますか? したがって、その代わりにexecuteFetchRequest、またはそれらの線に沿った何かmanagedObjectContextである可能性があります 。executeOperationOnFetchRequestResults

与えられた入力に感謝します:)

4

1 に答える 1

1

Core Data は、そのような便利な機能を提供していません。オブジェクトのセットを更新するには、「手動」で行う必要があります。コードの行数が気になる場合は、例を次のように要約できます。

[mutableFetchResults makeObjectsPerformSelector:@sel(setWasViewed:) withObject:[NSNumber numberWithBool:NO]];

「wasViewed」属性を、NSDate である「lastViewed」のようなものに変更することもできます。本を閲覧済みとしてマークする代わりに、'lastViewed' を現在の時刻に更新するだけです。次に、書籍の「lastViewed」時間がセッションの開始時間よりも長いかどうかを確認することで、書籍が現在のセッションで閲覧されたかどうかを判断できます。

于 2010-04-21T14:57:24.250 に答える