[英]Core data fetch request with NSPredicate?
我正在使用此代码从core data
获取core data
NSFetchRequest * desFetctRequest = [[NSFetchRequest alloc] init];
[desFetctRequest setEntity:[NSEntityDescription entityForName:@"IssueDescription" inManagedObjectContext:managedObjectContext]];
[desFetctRequest setIncludesPropertyValues:NO];
[desFetctRequest setPredicate:[NSPredicate predicateWithFormat:@"(issueId == %@) && (partyId == %@)",issueId, pid]];
NSError * error = nil;
NSArray * savedIssuesDes = [managedObjectContext executeFetchRequest:desFetctRequest error:&error];
但是我得到了0对象的savedIssuesDes
数组,但是,如果我不使用预测,它将给我7对象的savedIssuesDes
。 我的谓词值为issueId == "42" AND partyId == "1"
我的谓词有问题吗? 但是我在其他项目中像这样使用NSPredicate
并获得了预期的结果。
编辑:这是我的IssueDescription
类
@interface IssueDescription : NSManagedObject
@property (nonatomic, retain) NSString * desriptionId;
@property (nonatomic, retain) NSString * issueDesc;
@property (nonatomic, retain) NSString * issueId;
@property (nonatomic, retain) NSString * partyId;
@end
解决方案:正如每个人所说,这里的一切都还可以。 partyId
在服务器端更改为party_id
。 我希望那个家伙在我面前。无论如何,谢谢大家的帮助。
对我来说很好,但您也可以这样做。
我更喜欢这样做,因为它使阅读(无论如何对我而言)更容易。
只是想指出另一种可以尝试的方式,它可以使调试更容易...
NSFetchRequest * desFetctRequest = [NSFetchRequest fetchRequestWithEntityName:@"IssueDescription"];
[desFetctRequest setIncludesPropertyValues:NO];
NSPredicate *issuePredicate = [NSPredicate predicateWithFormat:@"issueId = %@", issueId];
NSPredicate *partyPredicate = [NSPredicate predicateWithFormat:@"partyId = %@", pId];
NSPredicate *compoundPredicate = [NSCompoundPredicate andPredicateWithSubPredicates:@[issuePredicate, partyPredicate];
[desFetctRequest setPredicate:compoundPredicate];
NSError *error = nil;
NSArray *savedIssuesDes = [managedObjectContext executeFetchRequest:desFetctRequest error:&error];
完成此操作后,尝试将复合谓词更改为每个仅包含一个谓词,以确保模型包含正确的数据。
尝试:
[desFetctRequest setPredicate:[NSPredicate predicateWithFormat:@"(issueId = %@) && (partyId = %@)",issueId, pid]];
要么
NSString *format = [NSString stringWithFormat:@"(issueId == '%@') && (partyId == '%@')",issueId, pid];
[desFetctRequest setPredicate:[NSPredicate predicateWithFormat:format]];
您是否尝试删除了[desFetctRequest setIncludesPropertyValues:NO];
。
如果includePropertyValues为NO,则Core Data仅获取匹配记录的对象ID信息-不会填充行缓存。 Core Data仍然返回托管对象,因为它仅需要托管对象ID即可创建故障。 但是,如果您随后引发故障,则Core Data会在(空)行缓存中查找,找不到任何数据,然后再次返回到存储中以获取数据。
您必须用AND替换&&
编辑:马丁是对的
Edit2:您是否尝试使用=而不是==。 如果使用==,请在谓词中尝试使用'%@'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.