Какова роль селектора в 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)];

работал на меня

Другие вопросы по тегам