У меня есть цикл for, который выполняет итерации через словари в словаре, пытаясь найти тот, у которого есть ключ, соответствующий ключу из полностью отдельного словаря.Сравнение двух значений словаря дает мне NSInvalidArgumentException
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");
}
}
Возможно, вы вызываете objectForKey на объект NSString вместо объекта NSDictionary. Проверьте содержимое rootDictCopy. Вы можете добавить проверку типов. : P –
@AmitTandel Только что проверено, они оба являются правильными NSMutableDictionaries и отображаются в журналах, как и NSMutableDictionary. – JustMe
Можете ли вы отправить, какие журналы отображаются для «rootDictCopy» и «routePathRootDictCopy»? –