Могу ли я использовать объекты протокола в качестве ключей в NSDictionary? - PullRequest
2 голосов
/ 18 августа 2010

Я прочитал в документе Apple, что (как я и ожидал) NSDictionary не ограничивается только строками для ключей.Здесь также есть сообщение, подтверждающее, что наборы можно использовать.Я хочу использовать объекты протокола, но этого не происходит.Я initWithObjectsAndKeys и передать @protocol (MyGreatProtocol) в качестве ключа.Компилируется, но я получаю ошибку во время выполнения, в которой говорится, что что-то вроде «объект [объект протокола] не реализует что-то другое - проблема впереди», а затем другое сообщение об ошибке, в котором говорится что-то вроде «Видите ли, я сказал, что это вызовет проблемы.this! "

Хорошо, формулировка второго, возможно, немного отличалась, но извините, не сейчас, на компе, и хотел бы попытаться уточнить это, прежде чем я действительно вернусь к этому.Надеюсь, по крайней мере кто-нибудь поймет суть моей проблемы.

Может быть, именно так я ссылаюсь на протокол?Я играл с альтернативами без успеха.И @protocol (Blah) возвращает указатель?Так что не могу понять, почему это не работает.

1 Ответ

5 голосов
/ 18 августа 2010

Вы можете использовать функции NSStringFromProtocol и NSProtocolFromString, если хотите сохранить имена протоколов в словаре. NSStringFromProtocol вернет строковый объект, который вы можете использовать в качестве ключа, а NSProtocolFromString пойдет другим путем.

Ключевые объекты в словаре должны соответствовать протоколу NSCopying, поскольку ключи должны быть логически неизменными.

...