我是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
。我无法找到更好的解释,我的问题是这个选择器的目的是什么,这个选择器引用的方法是什么,它应该做什么并返回。
答案 0 :(得分:4)
使用@selector(title:)
定义将调用哪个方法。
在我的示例中,它将调用
- (void) title:(id)someObject {}
最后小心分号!如果你最后有一个分号,你的方法会有像我上面那样的参数。
您的代码仅显示@selector(title)
,并且将调用方法标题而不使用如下参数:
- (void)title {}
文档声明:
<强>选择强>
一个选择器,用于标识返回标识的方法 用于排序规则的对象的字符串。该方法应该不 参数并返回一个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)];
为我工作