gpt4 book ai didi

ios - 如何将 NSPredicate 与链式虚拟属性(property)一起使用?

转载 作者:行者123 更新时间:2023-11-29 10:22:00 26 4
gpt4 key购买 nike

假设有两个由 Sqlite 支持的 ManagedObject:

1.) User 有两个属性,firstnamelastname 和一个虚拟( transient )属性 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

我想获取具有特定发件人全名的所有 Message 实例。这是我正在构建的 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")'

最佳答案

您不能在获取请求谓词中使用 transient 属性,这是因为您尝试使用的数据不存在于 SQLite 数据库中。

您需要重写谓词以仅使用 firstnamelast name

您可能希望使用 BEGINSWITHENDSWITH 执行此操作,然后您可能还希望在获得提取结果后运行第二个过滤器以确保您没有'结果集中有任何误报。

或者,您可以使全名成为非 transient 的,然后它可以在谓词中使用。在这种情况下,您将实现自定义访问器方法以确保任何更新也适用于全名。

关于ios - 如何将 NSPredicate 与链式虚拟属性(property)一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34592473/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com