2010-08-18 67 views
2

我讀過蘋果文件,(正如我所料)一個NSDictionary不僅限於鍵的字符串。這裏還有一個帖子,確認可以使用套件。我想使用協議對象,但它沒有發生。我initWithObjectsAndKeys並通過@protocol(MyGreatProtocol)作爲關鍵。編譯但我得到一個運行時錯誤,說像「對象[協議對象]沒有實現另一個 - 前面的麻煩」,然後另一個錯誤信息,說:「你看,我說這會導致問題。這個!」我可以使用協議對象作爲NSDictionary中的鍵嗎?

好的,第二個的措辭可能略有不同,但抱歉不在現在的comp,想在我真的回到它之前嘗試澄清這一點。希望至少有人能得到我的問題的要點。

也許這是我參考協議的方式?我玩過替代品而沒有成功。和@protocol(Blah)返回一個指針?所以不能真正理解爲什麼它不起作用。

回答

5

如果您希望將協議名稱存儲在字典中,則可以使用功能NSStringFromProtocolNSProtocolFromStringNSStringFromProtocol將返回一個字符串對象,您可以將其用作關鍵字,並且NSProtocolFromString將以另一種方式進行。

字典中的鍵對象必須符合NSCopying協議,因爲鍵必須在邏輯上不可變。

+0

太棒了,謝謝!我確信這是爲了我,迫不及待地嘗試。踢自己沒有找到自己。這正是我想到的那種東西。雖然在查找NSObject或類似的ObjectAsString方法時很忙。這是你的深夜節目 - 幾年前應該學會不要在半夜嘗試「尋找答案」,但要上牀睡覺並重新回到它的身體。再次感謝。 – Rich 2010-08-18 11:20:12

+0

編號鍵不必是不可變的。正如你所說的,它們必須符合NSCopying,但只要任何變異不會改變-hash的結果或-isEqual的結果,它們就不一定是不變的: – JeremyP 2010-08-18 16:12:04

+0

@JeremyP:這就是我所說的「邏輯」不可變的意思。 – dreamlax 2010-08-18 21:19:13

相關問題