假設有兩種ManagedObject通過SQLite的支持:如何將NSPredicate與鏈式虛擬財產一起使用?
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.),其具有除了其他幾個屬性存儲在sender
屬性恰好一個用戶的關係的Message
。
@interface Message : NSManagedObject
@property User *sender;
@end
我想使用某個發件人的全名來獲取消息的所有實例。這是NSPredicate我構建:
[NSPredicate predicateWithFormat:@"sender.fullname CONTAINS[cd] %@", @"Searched Name"]]
不幸的是,我得到一個NSInvalidArgumentException
一旦我開始搜索:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'unimplemented SQL generation for predicate : (sender.fullname CONTAINS[cd] "S")'
您可能想查閱本書中關於搜索文本的章節:https://www.objc.io/books/core-data/ - 它介紹瞭如何使字符串搜索工作可靠快速地進行。 Unicode很棘手。這裏有一篇文章涉及到了一些:https://www.objc.io/issues/9-strings/unicode/ –