我有点讨厌的问题。在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];
知道如何预测原始值吗?
答案 0 :(得分:2)
我认为你正在混淆两个不同的问题。一个是你有一些特殊的逻辑(你的常量)来自动显示一个本地化的字符串。另一种是返回存储在属性name
中的值。
理想情况下,这些应该分开以使这两个问题明确。因此,您不应该覆盖name
的getter,而只是使用不同的名称创建自定义方法(或根据您的需要派生属性)。
-(NSString*)displayName {
return [self.name isEqualToString:kConstant] ?
NSLocalizedString(kConstant) : self.name;
}
如果要使用自定义逻辑显示名称,请使用displayName
,并将谓词保留为
[NSPredicate predicateWithFormat:@"name != %@", kConstant];