如何使用链式虚拟财产的NSPredicate?
假设两个由Sqlite支持的ManagedObject:
1.)具有两个属性的User
, firstname
和lastname
以及只读的虚拟(临时)属性fullname
。
@interface User : NSManagedObject ... @property NSString *firstname; @property NSString *lastname; @property (readonly) NSString *fullname; @end @implementation User ... - (NSString*)fullname { return [NSString stringWithFormat:@"%@ %@", self.firstname, self.lastname]; } @end
2.)除了几个其他属性之外,还有一个Message
与一个存储在sender
属性中的用户有关系。
@interface Message : NSManagedObject @property User *sender; @end
我想用特定发件人的全名来获取消息的所有实例。 这是我正在构build的NSPredicate:
[NSPredicate predicateWithFormat:@"sender.fullname CONTAINS[cd] %@", @"Searched Name"]]
不幸的是,一旦我开始search,我得到一个NSInvalidArgumentException
:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'unimplemented SQL generation for predicate : (sender.fullname CONTAINS[cd] "S")'
您不能在提取请求谓词中使用瞬态属性,这是因为您尝试使用的数据在SQLite数据库中不存在。
您需要重写谓词以仅使用last name
和last name
。
您可能想要使用BEGINSWITH
和ENDSWITH
来做到这ENDSWITH
,然后您可能还想在获取提取结果后再运行第二个filter,以确保结果集中没有任何误报。
或者,您可以使全名非瞬态,然后可以在谓词中使用。 在这种情况下,您将实现自定义访问器方法,以确保任何更新也适用于全名。
- 如何知道NSFetchedResultsChangeUpdate更改哪些属性?
- 错误:UITableView跳到UITableViewAutomaticDimension顶部
- RestKit:映射JSONstring数组
- NSPredicate在多对多关系中计数> 0
- 增加关系到仅更新的产品核心数据
- 崩溃NSManagedObject版本:“objc_msgSend()select器名称:_queueForDealloc”
- NSManagedObject setter给我:无法识别的select器发送到实例
- Xcode Core-Data数据模型检查器中的索引是什么?
- 在复杂对象上定制NSSortDescriptor