Количество массивов внутри NSDictionary не регистрируется, хотя сам массив регистрируется - PullRequest
0 голосов
/ 05 марта 2012

Я работаю с NSMutableArray, называемым sections, для хранения данных раздела для моего UITableView in.

Каждый раздел представляет собой NSDictionary, содержащий следующие элементы: Stuffдругой массив для хранения строк данных раздела и Header строка для заголовка раздела.

Проблема, с которой я столкнулся, - попытка получить счетчик массива Stuff.

NSLog(@"Returning the count of %@", [[[sections objectAtIndex:0] objectForKey:@"Stuff"] count]); 

Я был в состоянии подтвердить, что [[sections objectAtIndex:0] objectForKey:@"Stuff"] действительно получает мне массив;если я сделаю это

NSLog(@"returning the contents of %@", [[sections objectAtIndex:0] objectForKey:@"Stuff"]);

содержимое будет зарегистрировано.

Я также знаю, что обычно [Stuff count] с радостью возвращает счетчик массива.

Я пропалчто-то здесь или это иначе, потому что массив находится в словаре?

Ответы [ 4 ]

4 голосов
/ 05 марта 2012

Вы используете %@ в качестве спецификатора формата, но [NSArray count] возвращает NSUinteger.

В соответствии с спецификатором формата , документами , вместо этого вы должны приводить его к беззнаковому длинному и использовать %lu. Если вы работаете только с iOS, %u без каста подойдет.

0 голосов
/ 05 марта 2012
NSLog(@"Returning the count of %@", [[[sections objectAtIndex:0] objectForKey:@"Stuff"] count]);

это должно сработать .. за исключением одной большой ошибки .. % @ предназначено для объектов (указателей) .. то, что вы получаете, это целое число (число массивов) ..change% @ ​​to% d и повторите попытку

0 голосов
/ 05 марта 2012

Метод -count возвращает целое число, а не объект, поэтому вам нужно использовать правильный спецификатор формата:

NSLog(@"Returning the count of %d", [[[sections objectAtIndex:0] objectForKey:@"Stuff"] count]);

Обратите внимание на использование %d вместо %@.

0 голосов
/ 05 марта 2012

Словарь не знает, какие объекты он содержит, поэтому вы должны сказать это, назначив NSMutableArray или, в вашем случае, приведение объекта, возвращенного из вашего словаря, в NSMutableArray *

NSLog(@"Returning the count of %@", [(NSArray *)[[sections objectAtIndex:0] objectForKey:@"Stuff"] count]);
...