ios-使用NSPredicate放置条目

问题描述

使用NSPredicate放置条目

从数据库中提出 Friend 目标,条件是匹配NSFetchedResultsController给出的user部分。如下:

- (NSFetchedResultsController *)fetchedFriendsResultsController
{
    if (_fetchedFriendsResultsController != nil) {
        return _fetchedFriendsResultsController;
    }

    //Get the correct array of friends for that user
    NSFetchRequest *fetchRequestItems = [[NSFetchRequest alloc] init];
    NSEntityDescription *entityItem = [NSEntityDescription entityForName:@"Friend" inManagedObjectContext:self.managedObjectContext];
    [fetchRequestItems setEntity:entityItem];

    User* myUser = [DataBaseManager getCurrentUser:managedObjectContext];
    [fetchRequestItems setPredicate:[NSPredicate predicateWithFormat:@"user == %@", myUser]];

    //Sort by name descending
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO];
    NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil];
    [fetchRequestItems setSortDescriptors:sortDescriptors];

    NSFetchedResultsController *fetchedItemsResultsController =[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequestItems managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];

    _fetchedFriendsResultsController = fetchedItemsResultsController;

    return _fetchedFriendsResultsController;
}

此代码运行正常,所有的friend都成功按字母顺序递减排列。
现在我需要一个特殊的friend对象,名字不是按照字母顺序。然后将它们排在其他friend之前。

判断条件是where 'name' == @"SPECIFIC_NAME"。

应该怎么实现?是不是要将这个特殊case添加到分类描述符或者Predicate中?

谢谢

解决方案

可能是你需要一个attributesortDescriptor

如果是特殊的friend,用类似isSpecial带有属性显示。 作为第一sortDescriptor添加:

NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"isSpecial" ascending:YES];
NSSortDescriptor *sortDescriptor2 = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO];

NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor1, sortDescriptor2, nil];
[fetchRequestItems setSortDescriptors:sortDescriptors];
时间: 2024-08-05 03:34:43

ios-使用NSPredicate放置条目的相关文章

IOS谓词--NSPredicate 和array

        NSArray *array = [NSArray array];        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.msgid == %@",feed.msgid];         NSArray *filterArr = [array filteredArrayUsingPredicate:predicate];         NSPredicate *predicat

IOS谓词--NSPredicate

Cocoa 提供了NSPredicate 用于指定过滤条件,谓词是指在计算机中表示计算真假值的函数, 它使用起来有点儿像SQL 的查询条件,主要用于从集合中分拣出符合条件的对象,也可以 用于字符串的正则匹配.首先我们看一个非常简单的例子,对谓词有一个认知. #import <Foundation/Foundation.h> @interface Person: NSObject{ int pid; NSString *name; float height; } -(void) setPid:

iOS设备将标配触控笔?苹果提交iPen技术专利

众所周知,乔布斯对于触控笔是相当排斥的,他在 2007年iPhone发布会上扮鬼脸说出的No,没人愿意使用触控笔的话想必大家还记得.但是在不久的将来,我们很可能会在苹果 iOS设备上会看到配有一根触控笔.因为在今日,美国专利商标局公布了多达27个有关苹果触控笔iPen的专利申请.虽 然苹果表面上与触控笔一直保持着距离,但是在过去五年中,苹果不断地申请与触控笔iPen相关的技术专利.今日美国专利商标局也公布了一系列有关苹果触控 笔iPen的专利申请,其中包括如何提高iOS设备对于iPen的识别能力

思科交换机图文设置扩展ACL的配置与应用技巧

  无论是在思科路由器还是思科交换机等网络设备上,标准ACL访问控制列表始终无法同时匹配通信源地址与目标地址的特性,也不无法满足现今网络世界"粒度化"控制的要求,比如:允许访问某一服务器的某项服务功能,但是不允许Ping通该服务器.那么,就需要使用扩展的ACL来替代标准的ACL的应用,在实际的应用控制中,扩展的ACL较标准ACL而言,似乎更受管理员的喜爱. 演示目标:配置扩展ACL为网络应用提供更"粒度化"的控制. 演示环境:使用演示标准ACL的配置部分的如下图AC

思科Catalyst 2960交换机中的CVE-2017-3881漏洞分析

本文讲的是思科Catalyst 2960交换机中的CVE-2017-3881漏洞分析, 2017年3月17日,思科官方网站发布公告称Cisco IOS&IOS XE Software 集群管理协议(Cluster Management Protocol)存在远程执行代码漏洞(CVE-2017-3881). 该漏洞是思科在研究CIA泄漏文档"Vault 7"的过程中发现的,攻击者可以在未授权的情况下远程重启受影响的设备或越权执行代码.造成该漏洞的主要原因是由于没有限制CMP-sp

《虚拟化安全解决方案》一2.4 配置Citrix XenServer

2.4 配置Citrix XenServer XenServer的优点是它非常类似Linux,对于一些虚拟管理员,这也是缺点,因为它们可能没有命令行正确管理和配置这些系统.但仍有许多事情使用XenCenter是可以完成的,使用者仍需要利用命令行完成许多特定的任务.这里的另一点是很重要的--XenServer不是标准的Linux内核或操作系统.它是充分修改的,以至于应该仔细地考虑运行标准操作系统命令可能产生什么负面影响. 2.4.1 给XenServer打补丁 XenServer的所有补丁都被称为

[IOS开发]搜索用谓词NSPredicate

Cocoa提供了一个类NSPredicate类,该类主要用于指定过滤器的条件,该对象可以准确的描述所需条件,对每个对象通过谓词进行筛选,判断是否与条件相匹配.谓词表示计算真值或假值的函数.     NSPredicate *predicate;     predicate=[NSPredicatepredicateWithFormat:@"name=='Herbie'"];//用predicateWithFormat创建一个谓词,name作为键路径    BOOL match=[pre

IOS开发之NSPredicate 查询、搜索

简述:Cocoa框架中的NSPredicate用于查询,原理和用法都类似于SQL中的where,作用相当于数据库的过滤取. 最常用到的函数 + (NSPredicate *)predicateWithFormat:(NSString *)predicateFormat, ...; 1.比较运算符 > .< .== . >= .<= . != 例:@"number >= 99"   2.范围运算符:IN .BETWEEN 例:@"number BE

iOS的查询、过滤(NSPredicate)

原文:http://www.2cto.com/kf/201208/150608.html 参考:http://blog.csdn.net/iscape/article/details/7318021 参考:http://blog.csdn.net/zhulei1018/article/details/6777220 首先举一个例子: 匹配9-15个由字母/数字组成的字符串的正则表达式:     NSString * regex = @"^[A-Za-z0-9]{9,15}$";