【问题标题】:What is the correct way for quering a NSNumber in a NSArray within CoreData?在 CoreData 的 NSArray 中查询 NSNumber 的正确方法是什么?
【发布时间】:2012-04-28 12:26:13
【问题描述】:

我有一个实体,其 ID 类型列名为“responsibleUsers”。在本专栏中,我存储了一个包含 NSNumber 的数组。 我想获取与我当前用户匹配的该实体的所有对象。因此我创建了以下谓词:

    [NSPredicate predicateWithFormat: @"%@ IN responsibleUsers",[NSNumber numberWithInteger: curUser.oID.integerValue] ]

无论我尝试什么,我的应用程序都会崩溃。一次使用 EXC_BAD_ACESS,一次使用“未实现的 SQL 生成谓词 nsnumber”

查询我的实体的正确方法是什么?

【问题讨论】:

    标签: core-data nsarray nspredicate nsnumber nsfetchrequest


    【解决方案1】:

    您尝试的查询假定您有两个实体:您查询的实体(我们称之为Group)和另一个可能称为User,它设置为来自@987654323 的一对多关系@叫responsibleUsers。然后您就可以使用您建议的谓词:

    [NSPredicate predicateWithFormat:@"%@ IN responsibleUsers, aUser]; 
    

    这将是 Core Data 对象图的推荐用法。

    在您的设置中,您似乎将NSNumber 数组设置为属性,而不是关系。因此,您不能使用这样的查询。您只需检索数组并查询数组。

    BOOL containsResponsibleUser = NO;
    for (NSNumber *n in aGroup.responsibleUsers) {
        if ([n isEqualTo:[NSNumber numberWithInteger: curUser.oID.integerValue]]) 
           containsResponsibleUser = YES;
    }
    

    如果您确实要查询一组用户,我会推荐第一种方法。如果您正在查询某种用户,我建议使用BOOL 属性responsible 作为最有效的解决方案。

    【讨论】:

    • 谢谢 - 是的,你完全正确。在 CoreData-Transformable-Property 中存储 NSArray 违背了 Core Data 的本质。我将模型和代码更改为通常的关系模式,一切正常...谢谢。
    猜你喜欢
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多