Динамический селектор с использованием 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;
}
Другие вопросы по тегам