【问题标题】:Filter Core Data results by property IN array按属性 IN 数组过滤核心数据结果
【发布时间】:2011-09-02 02:53:18
【问题描述】:

我目前让 Core Data 成功返回了名为 Event 的特定实体的所有结果:

NSManagedObjectContext *context = [delegate managedObjectContext];
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Event" 
                                                     inManagedObjectContext:context];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescription];

NSError *error;
NSArray *fetchResults = [context executeFetchRequest:request error:&error];

Event 实体的一个属性是标题为tid 的字符串。我还有一个数组filterArray,其中包含所有允许的 tid 值。

如何让我的核心数据请求仅返回具有与filterArray 中的值之一匹配的 tid 属性的事件?我相信答案与 NSPredicate 相关,但我对它还不够熟悉,无法让它服从我的意愿。

【问题讨论】:

    标签: objective-c cocoa ios core-data nspredicate


    【解决方案1】:

    试试这个:

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"tid IN %@", filterArray];
    
    [request setPredicate:predicate];
    

    查看Predicate Programming Guide 中的Aggregate Operations

    编辑

    看看NSPredicate iPhone 3.2 SDK Core Data “IN clause” NSInvalidArgumentException exception。你有同样的错误。问题是列/属性名称中的拼写错误。语法应该没问题,不能随便找tid

    【讨论】:

    • 感谢您的回复。我尝试了您的建议,但我收到了“NSInvalidArgumentException”,原因是:“未实现谓词的 SQL 生成:(tid IN {1, 2})”。对这个有什么想法吗?
    • 我可以使用 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"tid IN[c] %@", filterArray];不区分大小写?
    • @GuyKahlon 你知道如何使 IN 查询不区分大小写吗?
    • 我想在数组上做一个映射并且每个条目都小写可能是一个解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多