6

私のコア データ モデルでは、 aPersonには 1 つ以上Carsの があり、順序付けされていない対多の関係 'Cars' で指定されています。datePurchased、または によって注文された人の車を取得する必要があることがよくありますdateLastUsed

今までPersonforに独自のメソッドを追加してきましたcarsByDatePurchased。これは、ソート記述子を使用して NSSet をソートしcars、NSArray を返します。

代わりに、これに Fetched Property を使用できますか? 車を特定の順序で必要とするたびに、ソート記述子を使用してパフォーマンスのオーバーヘッドが発生していますcarsByDatePurchased。取得したプロパティがキャッシュされているようですが、正しいですか?

フェッチされたプロパティと独自の実装の制限は何ですか?

そして決定的に、フェッチされたプロパティの値は実行間で保持されますか? 取得したプロパティを更新してコンテキストを保存すると、次にアプリケーションを起動したときのために値が保存されますか?

4

4 に答える 4

4

フェッチされたプロパティは機能します。実際、「日付追加インデックス」でソートする必要がある Post->Comment 関係を持つ自分のプロジェクトでそれを使用しました。

いくつかの注意事項があります。ビジュアル エディターでは並べ替え記述子を指定できず、コードで指定する必要があります。

私はこのようなものを使用します

    // Find the fetched properties, and make them sorted...
for (NSEntityDescription *entity in [_managedObjectModel entities])
{
    for (NSPropertyDescription *property in [entity properties])
    {
        if ([property isKindOfClass:[NSFetchedPropertyDescription class]])
        {
            NSFetchedPropertyDescription *fetchedProperty = (NSFetchedPropertyDescription *)property;
            NSFetchRequest *fetchRequest = [fetchedProperty fetchRequest];

            // Only sort by name if the destination entity actually has a "index" field
            if ([[[[fetchRequest entity] propertiesByName] allKeys] containsObject:@"index"])
            {
                NSSortDescriptor *sortByName = [[NSSortDescriptor alloc] initWithKey:@"index"
                                                                           ascending:YES];

                [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortByName]];
            }
        }
    }
}

My Post エンティティには、次のように定義された「sortedComments」というフェッチされたプロパティがあります。

post == $FETCH_SOURCE

投稿には対多の「コメント」関係があり、コメントには逆の「投稿」があります

ここでの他の回答とは対照的に:このようなフェッチされたプロパティを使用する利点は、CoreDataがキャッシュを処理し、投稿のコメントとしてキャッシュを無効にすること、または実際にそれらを所有する投稿が変更されることです。

于 2012-11-12T13:02:16.863 に答える
2

パフォーマンスを向上させたい場合は、NSFetchedResultsController でフェッチを行い、キャッシュで動作させます。次回同じフェッチを実行するときは、フェッチが高速になります。特定の名前では、名前をキャッシュする必要があります。NSFetchedResultsController のドキュメントをご覧ください。

于 2012-10-22T19:05:27.433 に答える
1

フェッチされたプロパティは、基本的にフェッチ リクエストです。GUI でこれらのプロパティにソート記述子を追加する方法を知りませんが、間違っている可能性があります。しかし、メソッドでフェッチ リクエストを作成しcarsByDatePurchased、並べ替え記述子を提供しないのはなぜでしょうか? 配列または結果を返します (フラグを no に設定しNSOrderedSetて安価にラップできます)。copyItems:

于 2012-10-22T19:01:11.243 に答える