Храните int32_t в NSDictionary - PullRequest
       6

Храните int32_t в NSDictionary

3 голосов
/ 26 января 2010

Как сохранить переменную типа int32_t (например, для ABPropertyID) в NSDictionary?

[NSNumber numberWithInt:...] не похоже на работу.

Спасибо


Из комментариев:

NSLog(@" %@ %@ ", [NSNumber numberWithLong:kABPersonFirstNameProperty], kABPersonFirstNameProperty);

Отпечатков: 0 (ноль). Есть идеи?

Ответы [ 4 ]

2 голосов
/ 02 декабря 2010

Я предполагаю, что проблема Дейва относится к константам kAB ... - я могу ошибаться, в этом случае игнорируем следующее:)

Я считаю, что проблема здесь не в том, что вы используете неправильный синтаксис; это проблема порядка инициализации. Я предполагаю, что вы пытаетесь выполнить эту операцию, прежде чем инициализировать константы kAB ... - например, вызывая ABAddressBookCreate(). Несколько запутанная проблема - фрагмент:

NSLog(@" %@ %@ ", [NSNumber numberWithLong:kABPersonFirstNameProperty], kABPersonFirstNameProperty);

, который должен быть:

NSLog(@" %@ %d ", [NSNumber numberWithLong:kABPersonFirstNameProperty], kABPersonFirstNameProperty);

Вот мой вывод - до вызова ABAddressBookCreate():

NSLog(@"Check: %d %d %d", kABPersonFirstNameProperty,kABPersonMiddleNameProperty,kABPersonLastNameProperty);

производит

Проверка: 0 0 0

после вызова тот же оператор журнала выдает

Проверка: 0 6 1

2 голосов
/ 27 января 2010

+[NSNumber numberWithInteger:] будет хорошо хранить 32-разрядное число во всех 32-разрядных и 64-разрядных системах. +[NSNumber integerValue] найдет его. Если вам нужно это без знака, вы можете использовать `` + [NSNumber numberWithUnsignedInteger:] `.

1 голос
/ 27 января 2010

В этом случае использование NSNumber кажется наилучшей идеей.

В более сложных случаях вы всегда можете использовать NSValue или NSData, чтобы поместить любой тип или указатель в объект Objective-C, который можно сохранить в коллекциях Какао.

int32_t myInt = 42;
NSValue *myValue = [NSValue value:&myInt withObjCType:@encode(int32_t)];
1 голос
/ 27 января 2010

Как все говорили, NSNumber будет работать для этого. Однако есть два других варианта, о которых вам следует хотя бы смутно знать: CFDictionary (то же самое, что и NSDictionary под капотом, но он позволяет хранить произвольные указатели или целые числа размером с указатель) и NSMapTable.

...