繁体   English   中英

NSPredicate的核心数据获取请求?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM