我正在实施此SO帖子Custom Core Data SectionNameKeyPath:特别是,Martin R首次建议添加类别方法来提供sectionNameKeyPath
。
在那里,他们有一个名为acctPeriod的持久属性用于排序描述符,还有一个名为periodYear的类别方法,用于acctPeriod(准确地说,提取前4个字符)。但是,我有很多持久性属性,比如acctPeriod,用户可以为排序描述符选择任何一个属性,我想在它们上实现相同的方法,以sectionNameKeyPath
的形式提供。换句话说,我想将acctPeriod作为参数传递给类别方法,例如periodYear:(NSString
*)acctPeriod
这可能吗?这种类别方法和FRC(sectionNameKeyPath
)的代码看起来如何?
谢谢!
答案 0 :(得分:3)
“部分名称密钥路径”是应用于每个管理对象的密钥路径
并返回节名称,即
获取结果控制器调用
分割表时每个对象[object valueForKeyPath:<sectionNameKeyPath>]
分段。
如果密钥路径是作为(类别)方法实现的,则必须如此
方法不带参数,仅使用隐式参数self
。
因此,我没有看到附加参数如何
在该方法中使用(除非您使用一些全局变量)。
但是,如果为所有人创建部分名称的方法完全相同
可能的属性(比如在链接示例中获取字符串的前四个字符),您可以将该方法实现为NSString
上的类别:
@interface NSString (MyAdditions)
- (NSString *)firstFourCharacters;
@end
@implementation NSString (MyAdditions)
- (NSString *) firstFourCharacters {
if ([self length] <= 4)
return self;
return [self substringToIndex:4];
}
@end
然后使用
动态创建表单<yourAttribute>.firstFourCharacters
的部分名称密钥路径
sectionNameKeyPath:[NSString stringWithFormat:@"%@.firstFourCharacters", yourAttribute]
在获取的结果控制器中,yourAttribute
是持久属性
目前用于对表视图进行排序。
键值编码机制将会
(对于每个托管对象)首先将<yourAttribute>
应用于对象,然后将firstFourCharacters
应用于结果。
答案 1 :(得分:0)
正如所指出的,这应该是微不足道的:
@interface Transaction (AdditionalMethods)
-(NSString*)sectionStringForPeriod:(NSNumber*)acctPeriod;
@end