Динамический селектор с использованием UILocalizedIndexedCollation sectionForObject:collationStringSelector
Мне нужно установить селектор динамически при использовании UILocalizedIndexedCollation В моем приложении у меня есть следующий код:
UILocalizedIndexedCollation *indexedCollation=[UILocalizedIndexedCollation currentCollation];
for (MyObject *theObject in objects)
{
NSInteger section;
section=[indexedCollation sectionForObject:theObject collationStringSelector:@selector(mainTitle)];
theObject.section=(int)section;
}
mainTitle - это одно из многих свойств в myObject. Тем не менее, я хочу, чтобы селектор по любой строке. Я следовал подсказке с этого сайта: Какова роль селектора в sectionForObject раздела UILocalizedIndexedCollation:(id) объект collationStringSelector:(SEL) метод селектора, и представил следующее:
-(NSString*)myString
{
NSString* myString;
myString = // whatever code to set new string belonging to myObject
return myString;
}
section=[indexedCollation sectionForObject:theObject collationStringSelector:@selector(myString)];
Это вызвало сбой с ошибкой: [MyObject myString]: нераспознанный селектор отправлен на экземпляр...
Как правильно добавить динамический селектор?
1 ответ
Я предполагаю, что вы пытаетесь обрабатывать сортировку по различным свойствам MyObject
,
Ошибка, о которой вы сообщили, происходит потому, что MyString
метод должен быть частью MyObject
класс, а не класс, использующий UILocalizedIndexedCollation
,
Один из динамических способов определения селектора будет выглядеть примерно так:
UILocalizedIndexedCollation *indexedCollation = [UILocalizedIndexedCollation currentCollation];
NSString *propertyName;
if (someConditionA) {
propertyName = @"mainTitle";
} else if (someConditionB) {
propertyName = @"description"; // whatever property you need
} else {
propertyName = @"name"; // some default property you want to use
}
SEL propertySelector = NSSelectorFromString(propertyName);
for (MyObject *theObject in objects) {
NSInteger section = [indexedCollation sectionForObject:theObject collationStringSelector:propertySelector];
theObject.section = section;
}