2010-09-20 32 views
4

我正在使用以下代碼來使用CoreData匹配搜索條件來獲取所有行的查詢集:itemType = 1 但是我需要做的是獲取一個特定的數字來自數據的隨機行。 例如,我不需要檢索列名爲dataType = 1的所有100行數據,而是需要隨機獲取25行,其中dataType = 1. 我希望有相對無痛的解決方案。 任何幫助表示讚賞。 LQ從CoreData獲取隨機行的特定數

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]; 

回答

5

你不能真正獲取隨機行。一個合理的隨機化策略可能是獲取與謂詞匹配的所有對象,然後隨機選擇特定數量的對象。

反正你可以使用NSFetchRequest以下方法:

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

基本上,setFetchLimit允許你定義你想如何抓取幾行(在你的情況,你會限量25),而setFetchOffset定義行將開始返回的偏移量(有關詳細信息,請參閱fetchOffset屬性的文檔)。

這不是一個隨機過程,但可以隨機生成偏移量。但是,這裏值得注意的是,根據偏移量,您可以獲取介於零和您的提取限制之間的多個對象。