Неверный счетчик длины NSDictionary - PullRequest
3 голосов
/ 01 февраля 2012
{
    Items = {
        Item = {
            text = "item 1";
        }
        Item = {
            text = "item 2";
        }
        Item = {
            text = "item 3";
        }
    }
}

Выше приведен пример моего NSDictionary.Помните это для следующего фрагмента.

NSDictionary *dict = {the afore mentioned dictionary is here}
int count = [[[dict objectForKey:@"Items"] allKeys] count]; // Breakpoint here
NSLog(@"%i", count); // Breakpoint here

В моих точках останова я получаю следующие значения для count

  • В точке останова 1: count = (int) 128037184 (или некоторыедругие случайные и большие int)
  • В точке останова 2: count = (int) 5

Я бы ожидал, что int 3 раза оба.Что происходит?

Ответы [ 2 ]

12 голосов
/ 01 февраля 2012

В первом случае вы ломаетесь перед выполнением строки, поэтому count будет иметь все случайные данные, которые окажутся в этом месте в стеке.Если вы перейдете эту инструкцию в отладчике, вы увидите, что count изменится на более разумное число.

Во втором случае я не уверен, почему у вас больше ключей, чем вы ожидаете, носамое простое, что нужно сделать, это просто зарегистрировать весь словарь и посмотреть, что там:

NSLog(@"%@", dict);

Это покажет вам все ключи и значения в словаре, которые могут объяснить число, которое вы получаете.

5 голосов
/ 02 июня 2013

Я использую [dict count], который дает количество объектов в NSDictionary.

...