CoreData 和 NSPredicate
Posted
技术标签:
【中文标题】CoreData 和 NSPredicate【英文标题】:CoreData and NSPredicate 【发布时间】:2013-08-01 12:46:20 【问题描述】:我的 ios 应用程序上有 coredata,但我正在做的是从表中收集所有值,在我的例子中是一个 Questions 表,其中包含以下内容:
@property (nonatomic, retain) NSString * answerA;
@property (nonatomic, retain) NSString * answerB;
@property (nonatomic, retain) NSString * answerC;
@property (nonatomic, retain) NSString * answerD;
@property (nonatomic, retain) NSString * correctAnswer;
@property (nonatomic, retain) NSString * question;
@property (nonatomic, retain) NSString * timeStampLastUsed;
@property (nonatomic, retain) NSNumber * gameType;
@property (nonatomic, retain) NSString * continent;
我通过这种方式获取所有值:
NSError *error;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Questions" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSArray *fetchedObjects = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
我想要的是在 NSArray *fetchedObjects 中只包含具有特定游戏类型的问题。
如何使用 NSPredicate 做到这一点?
谢谢 最好的问候
【问题讨论】:
【参考方案1】:如果你知道你正在寻找的游戏类型的价值,你可以使用这样的东西:
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"gameType == %i", 0]];
通过在您的获取请求上设置谓词,它将过滤掉结果并仅返回您感兴趣的项目。
【讨论】:
由于 gameType 是一个 NSNumber 对象,我建议使用@"gameType.intValue == %i", 0
。通常,如果省略 intValue
,它会起作用,但它仍然是一个好习惯
我现在正在尝试做一些更高级的事情,我想获得欧洲大陆的所有游戏类型: NSPredicate *predicate = [NSPredicate predicateWithFormat:@"((gameType.intValue = = %i) OR (gameType.intValue == %i) OR (gameType.intValue == %i)) AND (continent.intValue == %i)",0,2,3, 0];但这并没有让我得到我期望的回报。我想获得来自欧洲大陆 (0) 的游戏类型 0,2 和 3。谁能帮帮我?
根据您提供的参数,您的谓词看起来是正确的。如果有的话,你会得到什么结果?我发现有时创建predicateWithBlock:
来测试过滤结果会更容易,然后在获得所需结果后将其重构回predicateWithFormat:
。
我得到了零,我的查询中没有值,这是不可能的,我有不同的游戏类型,并且大多数游戏的标志都是大陆 = 0。
您的continent
属性是NSString
。也许将您的谓词更改为(continent == %@)
并将您的参数更改为@“0”?以上是关于CoreData 和 NSPredicate的主要内容,如果未能解决你的问题,请参考以下文章
Coredata 和 Mogenerator,coredata 标志并发问题 EXC_BAD_INSTRUCTION
CoreData、SourceList 和 NSTreeController
NSFetchedResultsController、CoreData、SectionIndex 和特殊字符 (Umlaute..)