Если вы храните NSNumber * в качестве ключа к NSMutableDictionary, выполняет ли он поиск позже на основе адреса ключа или сохраненного значения? Кажется, что если я храню NSNumber в двух словарях со значением от одного, служащего ключом к другому, иногда, ключ не найден во 2-м словаре, хотя я уверен, что он там.
Я пытаюсь сделать следующее:
// fetch the items from Coredata and create two different lookups
NSArray *existingActions = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
for (SomeObject *someObject in existingActions)
{
NSNumber *actionId = [someObject actionId];
[actionMap setObject:someObject forKey: actionId];
NSNumber *positionId = [someObject positionId];
[positionMap setObject: actionId forKey: positionId];
}
// later on, I'm trying to print out the values from both lookups now
NSEnumerator *enumerator = [positionMap keyEnumerator];
NSNumber *positionId;
while ((positionId = (NSNumber *)[enumerator nextObject]))
{
NSNumber *actionId = (NSNumber *)[positionMap objectForKey:positionId];
SomeObject * myObj = (SomeObject *) [actionMap objectForKey:actionId];
NSLog(@"myObj: %@", myObj];
}
// This way yields the same result as above:
NSNumber *positionId = [NSNumber numberWithInt: 7]; // filled out by client
NSNumber *actionId = (NSNumber *)[positionMap objectForKey:positionId];
SomeObject *myObj = (SomeObject *)[actionMap objectForKey: actionId];
Часто myObj имеет значение null, поскольку objectForKey не может найти объект, связанный с actionId, в словаре actionMap.
В качестве дополнительного примечания класс SomeObject является производным от NSManagedObject. Документация для setObject: forKey: примечания для параметров, переданных в:
aKey: ключ для значения. Ключ
скопированы (используя copyWithZone :; ключи должны
соответствовать протоколу NSCopying).
Ключ не должен быть равен нулю.
Это связано с тем, что copyWithZone может отличаться от классов NSManagedObject?
Что я здесь не так делаю?