2

我是 iOS 开发的初学者,在阅读文档(关于使用索引列表配置 TableView 的 iOS 开发人员指南)时,我遇到了这个问题:

// Listing 4.7
for (State *theState in statesTemp) {
        NSInteger sect = [theCollation sectionForObject:theState collationStringSelector:@selector(name)];
        theState.sectionNumber = sect;
    }

我无法弄清楚选择器 ( @selector(name)) 及其用途,也无法找到带有在选择器中传递的名称的方法,即name. 我搜索了示例以找到更好的解释,并遇到了这个示例。

在代码清单中,有一条语句是方法调用:     

self.tableData = [self partitionObjects:objects collationStringSelector:@selector(title)];

现在选择器被调用title。我一直没能找到更好的解释,我的问题是这个选择器的目的和这个选择器引用的方法,它应该做什么和返回。

4

2 回答 2

4

一般来说

使用@selector(title:)您定义将调用哪个方法。

在我的例子中,它会调用

- (void) title:(id)someObject {}

注意最后的分号!如果你最后有一个分号,你的方法将有像我上面的参数。

您的代码仅声明@selector(title)并将调用不带参数的方法标题,如下所示:

- (void)title {}

特定于 UILocalizedIndexCollat​​ion

文档状态:

选择器
一个选择器,它标识一个方法,该方法返回一个在排序规则中使用的对象的标识字符串。该方法不应该接受任何参数并返回一个 NSString 对象。例如,这可能是对象的名称属性。

所以我建议你像这样实现它

self.tableData = [self partitionObjects:objects collationStringSelector:@selector(title)];
 ...
- (NSString *)title {
     NSString *title;
     // some code to fill title with an identifier for your object
     return title;
}
于 2012-07-23T09:08:48.560 回答
-1

尝试替换titleself

self.tableData = [self partitionObjects:objects collationStringSelector:@selector(self)];

为我工作

于 2015-03-16T04:16:17.777 回答