4

以下のコードを使用して、検索条件に一致する CoreData を使用してすべての行のクエリ セットをフェッチしています: itemType = 1。ただし、代わりに、データから特定の数のランダム行をフェッチする必要があります。たとえば、列名 dataType = 1 の 100 行すべてのデータを取得する代わりに、dataType = 1 の 25 行をランダムに取得する必要があります。比較的簡単な解決策があることを願っています。どんな助けでも大歓迎です。lq

NSFetchRequest *request = [[NSFetchRequest alloc] init];

[request setEntity:[NSEntityDescription entityForName:@"MyAppName" 
                    inManagedObjectContext:[self managedObjectContext]]];

NSError *error = nil;                                           
NSPredicate *predicate;
NSArray *fetchResults;
predicate = [NSPredicate predicateWithFormat:@"(itemType = %i)", 1];            
[request setPredicate:predicate];
fetchResults = [managedObjectContext executeFetchRequest:request error:&error];

if (!fetchResults) {
        // NSLog(@"no fetch results error %@", error);
}

self.mutableArrayName = [NSMutableArray arrayWithArray:fetchResults];
[request release];
4

2 に答える 2

5

実際にランダムな行をフェッチすることはできません。合理的なランダム化戦略は、述語に一致するすべてのオブジェクトをフェッチしてから、特定の数のオブジェクトをランダムに選択することです。

とにかく、次の方法を使用できますNSFetchRequest

- (void)setFetchLimit:(NSUInteger)limit
- (void)setFetchOffset:(NSUInteger)limit

基本的に、setFetchLimitフェッチする行数を定義でき(この場合、制限を25に設定します)、setFetchOffset行が返され始めるオフセットを定義します(詳細については、fetchOffsetプロパティのドキュメントを参照してください)。

これはランダムなプロセスではありませんが、オフセットをランダムに生成することができます。ただし、ここで注意する価値があるのは、オフセットによっては、ゼロとフェッチ制限の間にある多数のオブジェクトをフェッチする場合があるということです。

于 2010-09-20T16:55:22.883 に答える
-3

参照アプローチを使用することもできます。視聴回数で並べ替えた場合。私はそれについてずっと前に投稿しました:http://www.alterplay.com/ios-dev-tips/2010/06/fetch-random-record-with-coredata.html フォーマットして申し訳ありません。Blogger から Wordpress に切り替えた後、壊れました。

于 2011-12-14T20:37:42.033 に答える