核心数据,根据对象自身属性搜索对象

Posted

技术标签:

【中文标题】核心数据,根据对象自身属性搜索对象【英文标题】:Core data, search for objects based on objects own property 【发布时间】:2013-07-15 17:20:08 【问题描述】:

我有一个 NSManagedObject, foo 存储它创建的 NSDate。它还有另一个字段 lifespan 存储对象有效的秒数。每个 foo 可以有不同的生命周期值。是否可以退回所有未超过其寿命的foos?我不确定如何在我的 NSPredicate 中表达这一点,或者是否有可能?

【问题讨论】:

考虑用保存对象到期日期的属性替换 lifespan 属性。 我明白了,这样我只是比较价值。有道理,谢谢。 【参考方案1】:

Core Data 获取请求实际上可以包含简单的算术表达式。 因此,要查找“已创建 + 寿命 >= 现在”的所有对象, 以下作品:

NSDate *now = [NSDate date];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"created + lifespan >= %@", now];

【讨论】:

谢谢,这正是我想要的。【参考方案2】:

是的,这是可能的。 例如:

NSDate * yesterday = [NSDate dateWithTimeIntervalSinceNow:-(60 * 60 * 24)];
NSPredicate * predicate = [[NSPredicate alloc] initWithFormat:@"dateCreated > %@", yesterday];
NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setPredicate:predicate];
NSError * error = nil;
NSArray * results = [managedObjectContext executeFetchRequest:fetchRequest error:&error];

这里有更多关于编写谓词的信息:http://developer.apple.com/library/ios/#DOCUMENTATION/Cocoa/Conceptual/Predicates/Articles/pCreating.html

【讨论】:

以上假设您的对象 Foo 有一个“dateCreated”属性,它是一个 NSDate。 一天并不总是有 24 小时。 是的——但这演示了如何进行提取。 感谢您的回答。不幸的是,我刚刚意识到我忘记包含问题的一部分。对不起,不完整的问题。我现在正在更改我原来的问题以正确描述我的问题。

以上是关于核心数据,根据对象自身属性搜索对象的主要内容,如果未能解决你的问题,请参考以下文章

核心数据谓词根据日期属性过滤对象

iOS核心数据如何使用NSPredicate根据一对多的子属性查找父对象?

如何查询具有特定属性值的核心数据对象

从核心数据中检索特定对象

核心数据。无法根据与继承实体的关系来获取/排序实体

如何搜索核心数据子对象