Используя NSSortDescriptors, возвращаемый массив равен нулю

с помощью ответа StefanB в Как сортировать NSMutableArray с помощью sortedArrayUsingDescriptors? я получил в значительной степени понял и поэтому реализовал NSSortDescriptors в моем проекте, у меня есть имя Facebook Places, описание, идентификатор, длина и широта, поступающие из Facebook Graph. Затем рассчитал расстояние, используя мое местоположение и долготу из Facebook Places. И сохранил все это в массив(placesDataArray) словаря.

Теперь проблема в том, что при попытке отсортировать этот массив (placesDataArray) возвращаемый массив (sortedArray) равен нулю?

 NSLog(@"PLACES DATA ARRAY ===== > %@", placesDataArray);

    NSSortDescriptor * distanceDescriptor = [[NSSortDescriptor alloc] initWithKey:DISTANCE
                                                                         ascending:YES];

    id obj;
    NSEnumerator * enumerator = [placesDataArray objectEnumerator];
    while ((obj = [enumerator nextObject]));

    NSArray * descriptors =
    [NSArray arrayWithObjects:distanceDescriptor, nil];
    NSArray * sortedArray =
    [placesDataArray sortedArrayUsingDescriptors:descriptors];

    NSLog(@"\nSorted =========================>");

    enumerator = [sortedArray objectEnumerator];
    while ((obj = [enumerator nextObject]));
    NSLog(@"SORTED ARRAY ===========> \n%@", obj);

И мой результат:

> 2013-01-10 18:50:40.439 Chat.Points[12091:c07] PLACES DATA ARRAY ===== > (
        {
        category = Hotel;
        distance = "0.109";
        name = "New York Marriott Marquis";
        placeImageString = 20372413613;
    },
        {
        category = Hotel;
        distance = "0.019";
        name = "DoubleTree Suites by Hilton New York City - Times Square";
        placeImageString = 85286252698;
    },
    .
    .
    .
    .
    .
        {
        category = "Local business";
        distance = "0.229";
        name = "Le Pain Quotidien";
        placeImageString = 153110388035573;
    },
        {
        category = "Local business";
        distance = "0.074";
        name = NYSC;
        placeImageString = 144712562228653;
    },
        {
        category = "Local business";
        distance = "0.193";
        name = "The W Hotel";
        placeImageString = 113613138695956;
    },
        {
        category = "Local business";
        distance = "0.015";
        name = "Palace Theatre - Pricilla Queen Of The Desert!";
        placeImageString = 130723233698153;
    },
        {


         category = Hotel;
            distance = "0.033";
            name = "Renaissance New York Times Square Hotel";
            placeImageString = 111789988858447;
        } ) 
2013-01-10 18:50:40.500 Chat.Points[12091:c07]  Sorted =========================> 
2013-01-10 18:50:44.993 Chat.Points[12091:c07] SORTED ARRAY ===========>  
(null)

Пожалуйста, обратитесь к вопросу по ссылке, которую я предоставил выше. Усилия очень ценятся.


person Samapple007    schedule 10.01.2013    source источник
comment
что здесь DISTANCE?   -  person Midhun MP    schedule 10.01.2013
comment
Спасибо Midhun MP, «DISTANCE» — это ключ, который сохраняет значение объектов «distance», как вы можете видеть в моем коде, например, для distance = 0,229   -  person Samapple007    schedule 10.01.2013


Ответы (2)


Вы правильно сортируете массив, но в конечном выводе печатаете неправильный объект:

NSLog(@"SORTED ARRAY ===========> \n%@", obj);

должно быть

NSLog(@"SORTED ARRAY ===========> \n%@", sortedArray);
person Martin R    schedule 10.01.2013
comment
Большое спасибо, Мартин Р., это очень помогло, и я был пончиком, когда напечатал «obj» вместо «sortedArray» ... Он отлично работает! Принял ответ, к сожалению, не могу проголосовать из-за низкой репутации, но сделаю это, как только добьюсь.... - person Samapple007; 11.01.2013
comment
@ Samapple007: Есть ли причина, по которой вы не приняли ответ? Есть ли какие-либо проблемы с этим? - person Martin R; 01.02.2013

Напечатал sortedArray вместо obj

Неправильно -->

NSLog(@"SORTED ARRAY ===========> \n%@", obj);

Правильно -->

NSLog(@"SORTED ARRAY ===========> \n%@", sortedArray);

Благодаря https://stackoverflow.com/users/1187415/martin-r

person Samapple007    schedule 11.01.2013