1

iOS6コアデータで、スライドショーに似たアプリを構築しようとしています(特定のシーケンスに従ってdbエンティティを1つずつ調べます)。これは非常に簡単で、NSFetchedResultsController を使用することもできます。さて、問題は、特定の状況でエンティティを取得し、このエンティティのインデックスを知らなくてもそのエンティティに「ジャンプ」する必要があることです。

考えられる解決策の 1 つは、エンティティを 1 つずつループすることです。このエンティティの「インデックス」を取得する別の方法があるかどうか疑問に思っています。問題を説明する疑似コードを次に示します。

NSFetchRequest

  • 並べ替えられたエンティティ: 目的のエンティティ タイプ、最終更新日順
  • ** エンティティ ID または一意の ID によってエンティティの上記のリストのインデックスを見つける必要があります。

SQLでは、次のようなことをします

select ROWINDEX
from (
   select ROWNUM as ROWINDEX, uid
   from entity_table
   order by lastupdatedate desc
)
where uid="abc"

ありがとう。

4

2 に答える 2

1

ソートされたすべてのオブジェクトの配列があると仮定すると、次の方法でインデックスを見つけることができます

NSArray *objects = ...//Sorted Array
NSPredicate *predicate  = [NSPredicate predicateWithFormat:@"uid=='abc'"];
NSUInteger index = [objects indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
    return [predicate evaluateWithObject:obj];
}];
于 2013-06-01T05:18:22.520 に答える
1

私はあなたを完全に理解していないかもしれません。でも。FetchedResultsController には、配列であるプロパティ .fetchedObjects があります。そのアレイ内を簡単に移動して、必要なことを何でもできると思います。

探しているエンティティをどのように識別したいかを示しませんでした。あなたが探しているものを見つけるためにあなたが提案したように、あなたは確かにブルートフォースメソッドを使うことができます:

for (NSManagedObject *obj in fetchedResultsController.fetchedObjects)
{

}

結果セットが小さい場合。結果セットが大きすぎて効率的に実行できない場合は、NSPredicate を使用して fetchedObjects 配列をフィルタリングしてみてください。これはおそらく望ましい方法です。Using NSPredicate with Core Data NSFetchedResultsControllerのリンクを参照してください。

于 2013-06-01T05:05:21.800 に答える