核心数据实体的瞬态和派生属性之间有什么区别?我想创建一个"虚拟"可以在获取操作中使用的属性,以从核心数据实体返回本地化的国家/地区名称。
操作将以这种方式完成:
2将由此"虚拟"完成。属性。
我应该使用哪一个?瞬态或衍生的,我该怎么做?
我没有什么可以告诉你的,因为我不知道应该使用什么。
感谢
答案 0 :(得分:8)
根据Apple的Non-Standard Persistent Attributes指南:
您可以通过使用可转换属性或使用transient属性来表示由受支持的持久属性支持的非标准属性,从而将非标准类型用于持久属性。这两种方法背后的原理是相同的:您向实体的消费者呈现所需类型的属性,并在“幕后”将其转换为Core Data可以管理的类型。这些方法之间的区别在于,对于可转换属性,您只需指定一个属性,并自动处理转换。相反,使用瞬态属性,您可以指定两个属性,并且必须编写代码才能执行转换。
我建议使用瞬态属性。想法是你创建了2个字符串属性:countryName(非瞬态)和localizedCountryName(transient):
然后,在NSManagedObjectSubclass中,只需为localizedCountryName实现一个getter:
- (NSString *)localizedCountryName
{
NSString *result;
if ([self.countryName length] > 0) {
result = NSLocalizedString(self.countryName, nil);
}
return result;
}