我使用此代码从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];
但是我得到savedIssuesDes
数组有0个对象,但如果我不使用预测,那么它会给savedIssuesDes
个7个对象。
我得到谓词的值为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
。我希望那个人在我面前。不管怎样,谢谢你们的帮助。
答案 0 :(得分:1)
对我来说看起来不错,但你也可以这样做。
我更喜欢这个,因为它更容易阅读(无论如何)。
只是想指出另一种可以尝试的方法,可以让它更容易调试......
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];
完成此操作后,尝试将复合谓词更改为仅包含一个谓词,以确保模型包含正确的数据。
答案 1 :(得分:0)
尝试:
[desFetctRequest setPredicate:[NSPredicate predicateWithFormat:@"(issueId = %@) && (partyId = %@)",issueId, pid]];
或
NSString *format = [NSString stringWithFormat:@"(issueId == '%@') && (partyId == '%@')",issueId, pid];
[desFetctRequest setPredicate:[NSPredicate predicateWithFormat:format]];
答案 2 :(得分:0)
您是否尝试删除[desFetctRequest setIncludesPropertyValues:NO];
。
如果includesPropertyValues为NO,则Core Data仅提取匹配记录的对象ID信息 - 它不会填充行缓存。 Core Data仍然返回托管对象,因为它只需要托管对象ID来创建故障。但是,如果您随后触发了故障,Core Data会在(空)行缓存中查找,找不到任何数据,然后第二次返回到存储中以获取数据。
答案 3 :(得分:-1)
你必须更换&&通过AND
编辑:马丁是对的
Edit2:您是否尝试使用=而不是==。如果您使用==,请在谓词
中使用'%@'