我得到一个NSCFDictionary返回给我,我无法弄清楚如何使用它。我知道它的类型是NSCFDictionary,因为我打印了类,它出现了__NCSFDictionary。我无法弄清楚如何用它做任何事情。
我现在只想抓住它,但甚至无法让它发挥作用:
NSDictionary *dict = [[NSURLCredentialStorage sharedCredentialStorage] allCredentials];
for(NSURLProtectionSpace key in [dict keyEnumerator])
{
NSCFDictionary *value = [dict objectForKey:key];
}
allCredentials的类引用说它应该返回一个字典,其值也是字典。我的任务说明不起作用。我需要某种演员吗?
答案 0 :(得分:25)
NSDictionary和其他collection classes实际上是class clusters:在单个类的接口下伪装的几个具体子类类:它们都提供相同的功能(因为它们是同一个类的子类 - 在NSDictionary的情况下,这涉及三个“原始方法” -count
,-objectForKey:
和-keyEnumerator
),但具有不同的内部工作方式在不同的情况下,根据它们的创建方式以及它们可能存储的数据类型来提高效率。
NSCFDictionary只是NSDictionary的具体子类。也就是说,您的NSDictionaries实际上可能是NSCFDictionary实例,但您应该将它们视为NSDictionary的实例,因为这将为您提供所需的字典 - 存储功能。
NSDictionary *value = [dict objectForKey:key];
现在,你的代码不起作用的另一个原因:NSURLProtectionSpace是一个类,所以你应该将它用作指针,如下所示:
for (NSURLProtectionSpace *key ...
答案 1 :(得分:4)
NSCFDictionary是NSDictionary的私有子类,它实现了实际的功能。这只是一个NSDictionary。几乎所有你使用的NSDictionary都是一个NSCFDictionary。你编码没关系。您可以将变量键入为NSDictionary并相应地使用它。
答案 2 :(得分:0)
我有一个NSCFDictionary,它实际上是一个NSMutableDictionary对象,我可以从中删除项目。我提到这个是为了进一步澄清jtbandes的答案:NSCFDictionary对象可以是从NSDictionary继承的任何对象。