NSSortDescriptor вообще не может считать числа - PullRequest
2 голосов
/ 16 октября 2010

С помощью этого

    NSSortDescriptor *lessonDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lesson" ascending:YES];
[resultArray sortUsingDescriptors:[NSArray arrayWithObject:lessonDescriptor]];

он сортирует объекты "урока" по

(
    {
    lesson = 9;
    subject = bg;
},
    {
    lesson = 8;
    subject = bg;
},
    {
    lesson = 11;
    subject = CAE;
},
    {
    lesson = 11;
    subject = CAE;
},
    {
    lesson = 10;
    subject = CAE;
},
    {
    lesson = 10;
    subject = CAE;
},
    {
    lesson = 5;
    subject = Gg;
},
    {
    lesson = 4;
    subject = G;
},
    {
    lesson = 3;
    subject = G;
},
    {
    lesson = 2;
    subject = M;
},
    {
    lesson = 1;
    subject = M;
}

)

, поскольку вы можете видеть, что он не рассчитывается правильно. Можеткто-нибудь помочь?

спасибо большое

редактировать:

не знаю, как реализовать значение вещь =)

else if ([currentElement isEqualToString:@"lesson"]) 
{ 

    NSString *trimmedString = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    NSLog(@"trimmed: %@",trimmedString);
    int value = [trimmedString intValue];   ??
    [currentSummary appendString:value];  ??

    [currentSummary appendString:trimmedString]; 
} 

Ответы [ 3 ]

4 голосов
/ 16 октября 2010

Вы должны обрезать строку перед преобразованием «урока» в числа, чтобы дескрипторы сортировки работали правильно. В противном случае дескриптор сортировки видит только строковые значения, а не числа. Вот как вы удаляете пробелы и символы новой строки:

NSString *stringValue = [parsedValue stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

Вызов [stringValue intValue] получит целочисленное значение строки

int value = [stringValue intValue];

Сохраните это значение в массиве перед вызовом дескрипторов сортировки для этого атрибута.

Скажите, работает ли он?

1 голос
/ 16 октября 2010

Сортировал это как раз правильно. В конце концов, каждая запись является строкой, а в строке «10» перед «9» после всех ...

Теперь, если вы хотите отсортировать его так, как вы ожидали, вам нужно либо сохранить объекты NSNuumber и отсортировать их, либо иметь строки, хранящиеся в нормализованной форме, например "08", "09", "10" и затем возможно обрежьте начальные 0 из строки позже.

0 голосов
/ 08 января 2013
[NSSortDescriptor sortDescriptorWithKey:@"self"
                              ascending:YES
                             comparator:^(id obj1, id obj2){
    return [(NSString*)obj1 compare:(NSString*)obj2
                            options:NSNumericSearch];
 }];

сортирует диапазон от 0 до 1000000 ..... и далее.

...