iphone NSPredicate 中的 Random() 子句排序

Posted

技术标签:

【中文标题】iphone NSPredicate 中的 Random() 子句排序【英文标题】:Order by Random() clause in iphone NSPredicate 【发布时间】:2011-07-05 05:42:06 【问题描述】:

嗨,

我正在开发一个 iphone 应用程序,我必须借助核心数据 NSPredicate 对象从 sqlite 表中提取数据。

我想随机获取记录,不进行任何排序。

喜欢:

SELECT * FROM zquestionsdata where zquestiontype='Logic' ORDER BY RANDOM() 

NSPredicate如何实现?

谢谢.......

【问题讨论】:

这篇文章可以帮助你。 ***.com/questions/2063050/… 【参考方案1】:

你需要编写类似这样的代码

-(NSMutableArray *)getRandomArrayFromDB

    NSMutableArray *fetchResults;
        NSString *entityName=@"questionsdata";
        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
        NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:globalManagedObjectContext];
        [fetchRequest setEntity:entity];

        fetchResults = [NSMutableArray arrayWithArray:[globalManagedObjectContext executeFetchRequest:fetchRequest error:nil]];
        [fetchRequest release];
    NSString *cat=@"Logic";
            [fetchResults filterUsingPredicate:[NSPredicate predicateWithFormat:@"questiontype == %@",cat]];

// sort it in random order

NSUInteger count = [fetchResults count];
    for (NSUInteger i = 0; i < count; ++i) 
        // Select a random element between i and end of array to swap with.
        int nElements = count - i;
        int n = (random() % nElements) + i;
        [fetchResults exchangeObjectAtIndex:i withObjectAtIndex:n];
    

return fetchResults;

调用这个方法,它会给出你想要的。

【讨论】:

以上是关于iphone NSPredicate 中的 Random() 子句排序的主要内容,如果未能解决你的问题,请参考以下文章

iphone:NSFetchedResultsController 的 NSPredicate 问题

fetchedResultsController 方法中的 NSPredicate 问题

iPhone如何使用NSPredicate按父实体过滤Core Data?

一对多关系 iPhone - NSPredicate 核心数据查询

iPhone NSPredicate 如何创建一个检查属性是不是有值的谓词?

NSPredicate,带引号/不带引号