我有一个具有日期属性的核心数据实体。 我想写一个谓词来提取特定月份(例如,七月)中所有年份的所有日期。 如何做到这一点? 谢谢

#1楼 票数:6 已采纳

您可以在您的实体上创建一个新方法,我们将其称为monthOfDate 此方法仅使用[self dateAttribute]NSDateComponents提取日期的月份。

然后,您可以编写一个执行以下操作的谓词:

//assuming 1-based month indexing
NSPredicate * julyEntities = [NSPredicate predicateWithFormat:@"monthOfDate = 7"]; 

这里的技巧是认识到谓词的左键路径将导致方法调用。 因此,如果将左键路径设置为“ monthOfDate”,它将最终调用您的monthOfDate方法,并使用该方法的返回值作为谓词中的比较值。 整齐!

#2楼 票数:0

尚无法发表评论,所以以这种方式询问。

您最终是如何实现的? 我尝试在托管对象类中添加一个方法,但是一旦谓词触发,它就会说找不到键路径monthOfDate?

更新了两个文件:

.h文件:

@property (nonatomic,retain) NSNumber *monthOfDate;
-(NSNumber *)monthOfDate;

.m文件:

@synthesize monthOfDate;

-(NSNumber *) monthOfDate
{
NSDate *date = [self start];
NSDateComponents *components = [[NSCalendar currentCalendar]components: NSCalendarUnitMonth fromDate:date];
NSNumber *month = [NSNumber numberWithInteger:[components month]];
return month;
}

更新2

上面的代码在自动生成的Event类(NSmanaged对象)中。 稍后,我可能会将自定义代码移至某个类别,但到目前为止,无需任何模型修订。

下面是带有谓词的FetchedResultsController(在uiviewcontroller类中)设置:

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

NSEntityDescription *entity = [NSEntityDescription
                               entityForName:@"Event" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];

NSSortDescriptor *sortfix = [[NSSortDescriptor alloc]initWithKey:@"timeStamp" ascending:NO];
[fetchRequest setSortDescriptors:[NSArray arrayWithObjects:sortfix,nil]];
[fetchRequest setFetchBatchSize:20];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"client == %@ AND monthOfDate = %d", clientMO,[NSNumber numberWithInteger:6]];
[fetchRequest setPredicate:predicate];


NSFetchedResultsController *theFetchedResultsController =

[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                    managedObjectContext:managedObjectContext sectionNameKeyPath:sectionKeyPathProperty
                                               cacheName:nil];

//sectionKeyPathProperty is a variable that let's me choose one of multiple transient properties I have created for creating relevant sections.

self.fetchedResultsControllerClient = theFetchedResultsController;
_fetchedResultsControllerClient.delegate = self;

return _fetchedResultsControllerClient;

  ask by RunLoop translate from so

未解决问题?本站智能推荐:

1回复

“核心数据的自定义获取”属性

我正在我的应用程序中引入软删除模式。 我不会从上下文中删除对象,而是将其标记为“已删除”。 我将在此处使用(软)删除配方中成分的示例。 我在很多地方都需要食谱的食材。 如果可能的话,我要避免更新所有这些内容(并可能会丢失其中的任何内容)。 相反,我可以为食谱类重新定义ingredi
3回复

核心数据-如何访问实体属性?

我有2个实体。 运动员和评估。 运动员与Eval有很多关系。 一个运动员可以有多个运动员,但是一个运动员只能有1个运动员。 显示运动员的表格视图控制器的第一个视图控制器。 它显示所有运动员。 当您单击“运动员”时,将带您到表视图控制器,该控制器显示该运动员的所有评估。 如何在运动员
1回复

为核心数据属性指定有效值

当我使用Core Data时,有时我会遇到一个属性,而该属性只能具有一组特定的可能值。 举例来说,假设您创建了一个错误跟踪器,并且有一个名为Bug的实体。 然后,可能需要一个错误所在状态的属性。我们假设可能的状态为“打开”,“关闭”和“进行中”。 到目前为止,我所做的就是拥有类似定义为
1回复

保存核心数据?

我有一个主要面向数据库的功能应用程序。 我的客户当前正在使用该应用程序,并且它具有许多预先存在的已保存数据(请注意:这些数据都是本地的,未保存在在线数据库中)。 问题是,我知道当我更新数据模型时,我必须先卸载,然后重新安装应用程序,因为否则它将由于数据模型中的不一致而崩溃。 有什么方法可以
1回复

核心数据存储迁移带来的问题

我尝试使用NSMigrationManager的手动迁移来执行核心数据存储的迁移。 我已经使用默认向导在Xcode(版本4)中创建了映射模型,然后在代码中使用 这似乎工作正常。 唯一的问题是,在我尝试稍微调整了映射模型(使用此处描述的方法将一个实体分成两个实体)后,先前的方法不再起作
1回复

获取时核心数据中的重复记录

伙计们, 我的iPhone项目中有一些涉及Core Data的益智游戏。 在两个单独的视图控制器实例中的viewDidLoad方法期间,我调用以下方法: 每次运行我的应用程序时,学生对象的数量都会增加原始实体的数量(每个原始实体重复一次)。 因此,如果我从4开始,下次我得到8,
2回复

iPhone Core数据实体查找

我有一个非常简单的问题,我确定有一个简单的解决方案,但是在互联网上搜索了2天后,我找不到任何内容=( 情况是这样的:我决定将我的数据分成两个一对一的独立实体。 所以我有PERSON实体和FEATURES实体。 每个PERSON都有一个相关的FEATURES实体,其中person_id指
2回复

带数组的核心数据获取请求

我正在尝试使用谓词设置获取请求以获取商店中的记录,其标识符属性与谓词中指定的标识符数组匹配,例如 employeeIDsArray包含许多与商店中的ID匹配的NSNumber对象。 但是,我收到错误“无法解析格式字符串”。 如果它用于过滤数组,则此类型的谓词有效,但如上所述,对于核心