【发布时间】:2009-10-08 21:01:04
【问题描述】:
如果您将 NSNumber* 作为键存储到 NSMutableDictionary,它稍后会根据键的地址或存储的值进行查找吗?似乎如果我将 NSNumber 存储在两个字典中,其中一个用作另一个字典的键,有时,即使我确定它在第二个字典中,也找不到该键。
我想要做的是:
// 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 似乎无法在 actionMap 字典中找到与 actionId 关联的对象。
作为附加说明,SomeObject 类派生自“NSManagedObject”。 setObject:forKey的文档:传入参数的注意事项:
aKey:值的关键。关键是 复制(使用 copyWithZone:; 键必须 符合 NSCopying 协议)。 键不能为 nil。
是不是因为 NSManagedObject 类的 copyWithZone 可能不同?
我在这里做错了什么?
【问题讨论】:
标签: iphone objective-c cocoa cocoa-touch