Какова роль селектора в sectionForObject: (id) объекта UILocalizedIndexedCollation collationStringSelector:(SEL) метод селектора
Я новичок в разработке iOS и, просматривая этот документ (Руководство разработчика iOS по настройке TableView с индексированным списком), я наткнулся на это:
// 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
, Я не смог найти лучшего объяснения, и мой вопрос в том, какова цель этого селектора и метод, на который ссылается этот селектор, и что он должен делать и возвращать.
2 ответа
В общем
С @selector(title:)
Вы определяете, какой метод будет вызван.
в моем примере это будет называть
- (void) title:(id)someObject {}
Будьте осторожны с точкой с запятой в конце! Если в конце у вас точка с запятой, у вашего метода будут такие параметры, как у меня выше.
Ваш код просто гласит @selector(title)
и вызовет заголовок метода без параметра, подобного этому:
- (void)title {}
Специфично для UILocalizedIndexCollation
Документы утверждают:
селектор
Селектор, который идентифицирует метод, возвращающий идентифицирующую строку для объекта, который используется в сопоставлении. Метод не должен принимать аргументов и возвращать объект 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;
}
Попробуй заменить title
с self
:
self.tableData = [self partitionObjects:objects collationStringSelector:@selector(self)];
работал на меня