选择器在UILocalizedIndexedCollat​​ion的sectionForObject中的作用是什么:(id)object collat​​ionStringSelector:(SEL)selector方法

时间:2012-07-23 09:06:27

标签: iphone ios selector

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

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

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

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

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

现在选择器被称为title。我无法找到更好的解释,我的问题是这个选择器的目的是什么,这个选择器引用的方法是什么,它应该做什么并返回。

2 个答案:

答案 0 :(得分:4)

一般

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

在我的示例中,它将调用

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

最后小心分号!如果你最后有一个分号,你的方法会有像我上面那样的参数。

您的代码仅显示@selector(title),并且将调用方法标题而不使用如下参数:

- (void)title {}

特定于UILocalizedIndexCollat​​ion

文档声明:

  

<强>选择
  一个选择器,用于标识返回标识的方法   用于排序规则的对象的字符串。该方法应该不   参数并返回一个NSString对象。例如,这可能是一个   对象上的name属性。

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

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;
}

答案 1 :(得分:-1)

尝试将title替换为self

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

为我工作