Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSManagedObject子类的SectionNameKeyPath类别方法能否接受参数?_Ios_Objective C_Core Data_Nsfetchedresultscontroller - Fatal编程技术网

Ios NSManagedObject子类的SectionNameKeyPath类别方法能否接受参数?

Ios NSManagedObject子类的SectionNameKeyPath类别方法能否接受参数?,ios,objective-c,core-data,nsfetchedresultscontroller,Ios,Objective C,Core Data,Nsfetchedresultscontroller,我正在实现这篇SO帖子:特别是Martin R的第一个建议,即添加一个category方法来为我的sectionNameKeyPath提供信息 在这里,它们有一个名为acctPeriod的持久属性用于排序描述符,还有一个名为periodYear的类别方法用于acctPeriod(准确地说,提取其前4个字符)。但是,我有许多持久性属性,如acctPeriod,用户可以选择其中任何一个作为排序描述符,我希望在它们上实现与sectionNameKeyPath相同的方法。换句话说,我想将acctPeri

我正在实现这篇SO帖子:特别是Martin R的第一个建议,即添加一个category方法来为我的
sectionNameKeyPath
提供信息

在这里,它们有一个名为acctPeriod的持久属性用于排序描述符,还有一个名为periodYear的类别方法用于acctPeriod(准确地说,提取其前4个字符)。但是,我有许多持久性属性,如acctPeriod,用户可以选择其中任何一个作为排序描述符,我希望在它们上实现与
sectionNameKeyPath
相同的方法。换句话说,我想将acctPeriod作为参数传递给category方法,比如periodYear:(
NSString
*)acctPeriod

这可能吗?这样一个分类方法和FRC(
sectionNameKeyPath
)的代码看起来如何


谢谢

正如所指出的,这应该是微不足道的:

@interface Transaction (AdditionalMethods)
-(NSString*)sectionStringForPeriod:(NSNumber*)acctPeriod;
@end
“节名键路径”是应用于每个托管对象的键路径 并返回节名,即 获取的结果控制器调用
[object valueForKeyPath:]
在分割表格时针对每个对象 分成几个部分

如果密钥路径作为(类别)方法实现,则必须 一种没有参数的方法,只使用隐式参数
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使用的category方法。(我已经编辑了我的问题标题以便更清楚。)谢谢,我会试试的。另外,我不知道点语法也适用于方法(不仅仅适用于属性)。在链接的示例中(我没有足够的rep进行注释),是否不需要将访问持久性属性的行夹在willAccessValueForKey:@“acctPeriod”和didAccessValueForKey:@“acctPeriod”之间?还是只有当我们为建模属性编写自定义getter/setter时才需要它?@JSreedhar:在链接的示例中,
sectionNameKeyPath
只是一个访问
self.acttperiod
-如果将节名键路径实现为瞬态属性(如答案末尾所建议的),则需要will/didAccessValueForKey和原语访问器来避免无限递归。有关示例,请参见。transient属性的优点是为每个对象缓存节名,而不是频繁地重新计算。谢谢。另一件事,您是否同意Dan Shelly的建议,不要使用瞬态属性作为sectionNameKeyPath-他说这将导致故障触发。但是,如果Apple的示例代码使用它,我想它是可以的。@JSreedhar:我没有对此进行调查,因此无法对其进行评论。我调用此方法来指定NSFetchedResultsController中的sectionNameKeyPath:,我希望它的参数是当前用于排序表视图的持久属性@马丁纳说,不幸的是,这是不可能做到的。
sectionNameKeyPath:[NSString stringWithFormat:@"%@.firstFourCharacters", yourAttribute]