iOS核心数据谓词:如何预测原始值?

时间:2015-03-11 10:49:39

标签: ios objective-c core-data

我有点讨厌的问题。在coredata中我有一个名为“Category”的实体,我希望有一个默认类别,用户无法删除,编辑等。此默认类别称为“0_default_category”(存储在常量kSettingsLocalizedDefaultCategory中),此名称将被本地化替换显示给用户时的字符串。为此,我覆盖了吸气剂:

-(NSString *)name
{
    if([[self primitiveValueForKey:@"name"] isEqualToString:kSettingsLocalizedDefaultCategory]){
        return NSLocalizedString(kSettingsLocalizedDefaultCategory, nil);
    } else {
        return [self primitiveValueForKey:@"name"];
    }
}

现在我当然希望在常量而不是本地化字符串上使用谓词!但是这会使用本地化字符串上的谓词(所以我的getter被调用,我不想要它。)

request.predicate = [NSPredicate predicateWithFormat:@"name != %@", kSettingsLocalizedDefaultCategory];

知道如何预测原始值吗?

1 个答案:

答案 0 :(得分:2)

我认为你正在混淆两个不同的问题。一个是你有一些特殊的逻辑(你的常量)来自动显示一个本地化的字符串。另一种是返回存储在属性name中的值。

理想情况下,这些应该分开以使这两个问题明确。因此,您不应该覆盖name的getter,而只是使用不同的名称创建自定义方法(或根据您的需要派生属性)。

-(NSString*)displayName {
   return [self.name isEqualToString:kConstant] ? 
    NSLocalizedString(kConstant) : self.name;
}

如果要使用自定义逻辑显示名称,请使用displayName,并将谓词保留为

[NSPredicate predicateWithFormat:@"name != %@", kConstant];