У меня была похожая ситуация с тем же сообщением об ошибке:
[tempDictionary setObject:someDictionary forKey:someClass];
Все, что я сделал, это внедрил протокол NSCopying
в someClass
:
- (id)copyWithZone:(NSZone *)zone
{
id copy = [[[self class] allocWithZone:zone] init];
[copy setId:[self id]];
[copy setTitle:[self title]];
return copy;
}
Я думаю, что происходило то, что была сделана копия someClass
для использования в качестве ключа, но, поскольку мой объект не знал, как копировать себя (производная от NSObject
, он у него есть copyWithZone
в суперклассе) он отказался.
Одна вещь, которую я нашел с моим подходом, состоит в том, что он использует объект в качестве ключа. Если объект уже не создан, я постоянно вызываю allKeys
или просто выполняю перечисление по словарю.
[После этого я вижу, что вы хотите сохранить класс как ключ. Я оставляю это там, потому что я бы сэкономил много времени, если бы нашел свой ответ, когда искал SO. Я не нашел ничего подобного.]