对具有多个值的核心数据进行排序

勒克斯

我在核心数据中存储了品牌列表,每个品牌都与多个内容相关联。内容有一个称为的标志downStatus,用于表示是否下载了内容。以下方法用于从按品牌名称排序的Core数据中获取所有品牌

-(void)getDownloadedBrands{

AppDelegate *aAppDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;

NSMutableArray *aBrands = [[NSMutableArray alloc] init];


NSEntityDescription *entity =
[NSEntityDescription entityForName:@"Brand" inManagedObjectContext:aAppDelegate.managedobjectcontext];
 NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entity];

NSSortDescriptor *sort=[[NSSortDescriptor alloc]initWithKey:@"brandName" ascending:YES];
//NSSortDescriptor *sort1=[[NSSortDescriptor alloc]initWithKey:@"downStatus" ascending:YES];

[request setSortDescriptors:[NSArray arrayWithObjects:sort, nil]];

aBrands =(NSMutableArray *)[aAppDelegate.managedobjectcontext executeFetchRequest:request error:nil];
[request release];
[sort release];
NSLog(@"%@",aBrands);

brands = [[NSMutableArray alloc]initWithArray:aBrands];

aAppDelegate.dbBrandArr = brands;

[self loadGridView];

}

现在,我想使用downStatus“内容”中的进行排序就像是按字母顺序下载品牌,然后按字母顺序下载未下载品牌。对于未下载downStatus有两个值1用于0下载。请帮忙。

麦可

一种方法是2 fetchRequests使用NSPredicatewith值1/0 on downStatus属性并使用相同的字母顺序来制作CoreData sortDescriptor

现在,通过将0数组添加到1数组来创建一个新的Array。在您的代码中,它看起来像这样:

-(void)getDownloadedBrands{
    AppDelegate *aAppDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;

    //2 arrays
    NSMutableArray *aBrands0 = [[NSMutableArray alloc] init];
    NSMutableArray *aBrands1 = [[NSMutableArray alloc] init];
    //set entity en make requests
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Brand" inManagedObjectContext:aAppDelegate.managedobjectcontext];
    NSFetchRequest *request0 = [[NSFetchRequest alloc] init];
    NSFetchRequest *request1 = [[NSFetchRequest alloc] init];
    [request0 setEntity:entity];
    [request1 setEntity:entity];
    //create sortDescriptor alphabetically
    NSSortDescriptor *sort=[[NSSortDescriptor alloc]initWithKey:@"brandName" ascending:YES];
    //create predicates on downStatus property
    NSPredicate *predicate0 = [NSPredicate predicateWithFormat:@"downStatus == %@", [NSNumber numberWithBool:0]];
    NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"downStatus == %@", [NSNumber numberWithBool:1]];
    //set predicates to the requests
    [request0 setPredicate:predicate0];
    [request1 setPredicate:predicate1];
    //set sortDescriptor to both requests
    [request0 setSortDescriptors:[NSArray arrayWithObjects:sort, nil]];
    [request1 setSortDescriptors:[NSArray arrayWithObjects:sort, nil]];
    //fetch arrays with downStatus 1/0
    aBrands0 =(NSMutableArray *)[aAppDelegate.managedobjectcontext executeFetchRequest:request0 error:nil];
    aBrands1 =(NSMutableArray *)[aAppDelegate.managedobjectcontext executeFetchRequest:request1 error:nil];
    //release requests // NOT USING ARC??
    [request0 release];
    [request1 release];
    [sort release];
    //log results
    NSLog(@"aBrands0: %@",aBrands0);
    NSLog(@"aBrands1: %@",aBrands1);
    //add object 0 array to 1 array
    NSArray *combinedArray = [aBrands1 arrayByAddingObjectsFromArray:aBrands0];
    //copy array to brands
    brands = [[NSMutableArray alloc]initWithArray:combinedArray];
    //set property on appDelegate
    aAppDelegate.dbBrandArr = brands;
    //reload tableView
    [self loadGridView];
}

-编辑,使用downStatus键为NSDictionary添加答案

-(void)getDownloadedBrands{
    AppDelegate *aAppDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;

    NSMutableArray *aBrands = [[NSMutableArray alloc] init];


    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Brand" inManagedObjectContext:aAppDelegate.managedobjectcontext];
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    [request setEntity:entity];

    NSSortDescriptor *sort=[[NSSortDescriptor alloc]initWithKey:@"brandName" ascending:YES];
    //NSSortDescriptor *sort1=[[NSSortDescriptor alloc]initWithKey:@"downStatus" ascending:YES];

    [request setSortDescriptors:[NSArray arrayWithObjects:sort, nil]];

    aBrands =(NSMutableArray *)[aAppDelegate.managedobjectcontext executeFetchRequest:request error:nil];

    NSMutableArray *aBrands0 = [[NSMutableArray alloc] init];
    NSMutableArray *aBrands1 = [[NSMutableArray alloc] init];
    for (NSDictionary *dict in aBrands) {
        if ([dict valueForKeyPath:@"downStatus"] == YES)
        {
            //add to 1 array
            [aBrands1 addObject:dict];
        }
        else
        {
            //add to 0 array
            [aBrands0 addObject:dict];
        }
    }

    //sort arrays
    NSArray * array1 = [aBrands1 sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];
    NSArray * array0 = [aBrands0 sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];
    NSArray * allArray = [aBrands1 arrayByAddingObjectsFromArray:aBrands0];

    //combine arrays

    //copy array to brands
    brands = [[NSMutableArray alloc]initWithArray:combinedArray];
    //set property on appDelegate
    aAppDelegate.dbBrandArr = brands;
    //reload tableView
    [self loadGridView];

    [request release];
    [sort release];
    NSLog(@"%@",aBrands);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

具有多个关键路径核心数据的节

来自分类Dev

具有定义的属性值的核心数据对象的数量

来自分类Dev

swift中具有重复实体值的核心数据

来自分类Dev

对具有多个值的对象进行排序

来自分类Dev

有序核心数据关系-如何进行管理或默认排序是什么?

来自分类Dev

按日期和字符对核心数据属性进行排序

来自分类Dev

对核心数据中的相关实体进行排序

来自分类Dev

如何在GROUP BY之前对核心数据记录进行排序?

来自分类Dev

对核心数据中的相关实体进行排序

来自分类Dev

如何根据输入的日期对核心数据数组进行排序

来自分类Dev

核心数据:在多个关系中按日期属性排序

来自分类Dev

具有多个相似实体或单个大型实体的核心数据

来自分类Dev

从核心数据进行循环

来自分类Dev

Swift核心数据-具有不同结果的请求

来自分类Dev

具有核心数据和NSFetchedResultsController的后台线程

来自分类Dev

具有多种模型的核心数据迁移

来自分类Dev

具有UUID的现代核心数据性能

来自分类Dev

具有核心数据和NSFetchedResultsController的后台线程

来自分类Dev

删除核心数据中具有递归关系的记录

来自分类Dev

核心数据仅具有唯一属性的实体

来自分类Dev

具有多重关系的核心数据子查询

来自分类Dev

具有数组属性的核心数据

来自分类Dev

具有核心数据的自定义TableViewCell

来自分类Dev

具有多关系的复杂核心数据谓词

来自分类Dev

具有核心数据的主视图/详细视图

来自分类Dev

NSFetchedResultsController在后台线程上具有核心数据

来自分类Dev

核心数据仅具有唯一属性的实体

来自分类Dev

具有独特约束和关系的核心数据

来自分类Dev

对具有多个值的多维数组进行过滤和排序

Related 相关文章

热门标签

归档