我有一个for循环遍历字典中的字典,试图找到一个具有与完全独立字典中的键匹配的键的字符。
for (id rDCKey in rootDictCopy)
{
tempHouseNumber = rDCKey;
if ([[[rootDictCopy objectForKey:rDCKey] objectForKey:@"RandomUniqueIdentifier"] isEqual:[[routePathRootDictCopy objectForKey:houseNumber] objectForKey:@"RandomUniqueIdentifier"]])
{
NSLog(@"done");
goto DONE;
}
}
当两个值都等于零时,它很好,一切都过去了。但是当他们有一个值(总是一个256个字符长的NSString)时,它会崩溃,给我这个错误:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSTaggedPointerString objectForKey:]: unrecognized selector sent to instance 0xa000000333939394'
我不知道该怎么做,任何帮助都会受到赞赏。
如有必要,我可以提供更多代码。
感谢。
更新:我更新了我的for循环以检查类型,但同样的问题也出现了。
更新2:更改了||到&&
for (id rDCKey in rootDictCopy)
{
tempHouseNumber = rDCKey;
if ([[rootDictCopy objectForKey:rDCKey] isKindOfClass:[NSMutableDictionary class]] && [[routePathRootDictCopy objectForKey:houseNumber] isKindOfClass:[NSMutableDictionary class]])
{
if ([[[rootDictCopy objectForKey:rDCKey] objectForKey:@"RandomUniqueIdentifier"] isEqual:[[routePathRootDictCopy objectForKey:houseNumber] objectForKey:@"RandomUniqueIdentifier"]])
{
NSLog(@"done");
goto DONE;
}
}
else
{
NSLog(@"ERROR");
}
}
答案 0 :(得分:1)
原因:' - [NSTaggedPointerString objectForKey:]:无法识别 选择器发送到实例0xa000000333939394'
发生异常是因为您使用对象类型objectForKey
NSTaggedPointerString
方法
在比较之前,您应该检查数据的类型。 你可以这样做:
if ( [obj isKindOfClass:[NSDictionary class]] ) {
// is a NSDictionary
// do further action like get objectForKey, compare ..
} else {
// you don't got what you want -> print error log or something like that
}
您的代码应如下所示:
for (id rDCKey in rootDictCopy)
{
tempHouseNumber = rDCKey;
// TODO:
// check if rootDictCopy is a NSDictionary (if needed)
// check if routePathRootDictCopy is a NSDictionary (if needed)
// check if [rootDictCopy objectForKey:rDCKey] is a NSDictionary
// check if [routePathRootDictCopy objectForKey:houseNumber] is a NSDictionary
if ([[[rootDictCopy objectForKey:rDCKey] objectForKey:@"RandomUniqueIdentifier"] isEqual:[[routePathRootDictCopy objectForKey:houseNumber] objectForKey:@"RandomUniqueIdentifier"]])
{
NSLog(@"done");
goto DONE;
}
}
注意:我的答案将帮助您的代码正常工作而不会崩溃,但您应该找到为什么您在此处获得意外的对象类型。如何确定你总是接收NSMutableDictionary
对象,这是最好的解决方案!
答案 1 :(得分:0)
正如用户Nhat Dinh,Amit Tandel和Larme所说,rootDictCopy中的一些词典已经在代码中转换为NSString。我解决了这个问题,让这些词典保持字典,我不再收到这个错误。谢谢大家的帮助!