Добавление отрицательного значения NSNumber в NSDictionary - PullRequest
2 голосов
/ 01 марта 2012

Как человеку, имеющему некоторый опыт программирования, мне больно задавать этот вопрос. Я только начал играть с target-c несколько дней назад, и я пытаюсь просто добавить объекты NSNumber в NSDictionary. Проблема в том, что когда я добавляю объект NSNumber с отрицательным значением, создается впечатление, что он добавляется как строка, а не как NSNumber.

Вот как я инициализирую словарь:

testDict = [[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithDouble:-3],@"x",
                                        [NSNumber numberWithDouble:7, @"a",
                                    nil];

Полагаю, у меня действительно есть два вопроса: 1.) Разве вы не создаете объект NSNumber с отрицательным значением?

2.) Когда я распечатываю словарь, я получаю следующее:

NSLog(@"dictionary = %@", self.testDict);

a = 7;
x = "-3";

Почему двойные кавычки вокруг -3?

Ответы [ 2 ]

3 голосов
/ 01 марта 2012

@ Конрад Шульц прав, это просто артефакт того, как метод description для NSDictionary печатает содержимое словаря (что происходит при передаче словаря в NSLog)

Другой способпроверить, что все действительно работает должным образом, - это перебрать элементы словаря и распечатать описания отдельных объектов.Тогда вы увидите, что описание вашего отрицательного числа выглядит как число, а не строка.

NSDictionary* testDict = [[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithDouble:-3],@"x", [NSNumber numberWithDouble:7], @"a", nil];

NSArray *keys = [testDict allKeys];
for (NSString *key in keys) {
    NSLog(@"%@ => %@", key, [testDict objectForKey:key]);
}

Вывод на консоль:

2012-02-29 12:38:39.544 test10[1055:f803] x => -3  
2012-02-29 12:38:39.546 test10[1055:f803] a => 7
3 голосов
/ 01 марта 2012

Вы правы, и все в порядке. Это просто словарь - описание вводит в заблуждение.

Чтобы проверить, сломайте NSLog () и попробуйте (предупреждение: набрано на iPhone):

p [testDict objectForKey:@"x"];

Это должно показать, что это экземпляр NSNumber.

...