Использование объекта, возвращенного из getObject в NSMutableDictionary

Я новичок в Obj-C, так что это может быть очевидным вопросом.

Я добавляю 10 чисел в качестве ключей к NSMutableDictionary со значением 0 для всех из них. Что-то вроде этого --

for( i=1; i<10; i++)
{
    [dict setObject:[NSNumber numberWithInt:0] forKey:[NSNumber numberWithInt:i]];
}

Теперь на более позднем этапе кода я хочу сохранить объект для номера ключа и получить его значение. В этом случае, например, для числа 3 в качестве ключа мы сохранили значение 0. Для этого я использую этот код -

id numberObj = [game objectForKey:[NSNumber numberWithInt:3]];
int numberObjValue = ????

Я вижу идентификатор в отладчике как указывающий на 0. Но я не уверен, как получить его в целочисленной переменной, которую я объявил. Надеюсь, что это имеет смысл.

Я печатаю numberObj, и некоторый адрес печатается, как и ожидалось. Как мне превратить этот универсальный идентификатор в NSNumber и впоследствии сохранить его в numberObjValue?

3 ответа

id это не тип данных. Это просто означает, что он может вернуть любой тип объекта. Когда вы уверены, что вставили NSNumberВы просто получаете это значение в NSNumber,

NSNumber* myNumber = [myDict objectForKey:key];

Вот и все. Если вы хотите убедиться, что это на самом деле NSNumber будучи возвращенным, используйте isKindOfClass:,

Объект уже является NSNumber. Вы вводите NSNumber, и вы получаете NSNumber. Там нет необходимости преобразования. Вы можете назначить его переменной NSNumber, но объект не будет более или менее NSNumber для этого. Таким образом, вам не нужно превращать его в NSNumber, и вы можете получить целочисленное значение числа обычным способом, который вы делаете со всеми NSNumbers.

Вы можете получить номер из словаря и затем сохранить его в int с помощью intValue:

NSNumber *numberObj = (NSNumber *)[game objectForKey:[NSNumber numberWithInt:3]];
int numberObjValue = [numberObj intValue];

Или вы можете сделать это одной строкой:

int numberObjValue = [[game objectForKey:[NSNumber numberWithInt:3]] intValue];
Другие вопросы по тегам