Что такое NSCFDictionary?
Я возвращаю NSCFDictionary, и я не могу понять, как его использовать. Я знаю, что это тип NSCFDictionary, потому что я напечатал class, и он появился как __NCSFDictionary. Я не могу понять, как с этим поступить.
Я просто пытаюсь держаться за это пока, но не могу даже заставить это работать:
NSDictionary *dict = [[NSURLCredentialStorage sharedCredentialStorage] allCredentials]; for(NSURLProtectionSpace key in [dict keyEnumerator]) { NSCFDictionary *value = [dict objectForKey:key]; }
Ссылка на class для allCredentials говорит, что предполагается, что он вернет словарь, значения которого также являются словарями. Однако мое заявление о назначении не работает. Нужен ли мне какой-нибудь отбор?
- Как заставить приложение запускать NSTimer в фоновом режиме?
- Как распечатать имя метода и номер строки и условно отключить NSLog?
- Как я могу «разрезать» прозрачное отверстие в UIImage?
- Как использовать CaptiveNetwork для получения текущего имени точки доступа Wi-Fi
- Как resize изображения программно в объективе-c в iphone
- Как получить IMEI на iPhone?
- Скрытые особенности Xcode
- Программный пример UIPickerView?
- Метод доступа после завершения анимации UIImageView
- Как размыть сцену в SpriteKit?
- Зачем использовать протокол NSObject для реализации протокола
- Могу ли я отключить прокрутку звука UIPickerView?
- NSTimeZone: в чем разница между localTimeZone и systemTimeZone?
NSDictionary и другие classы коллекции – это кластеры classов : несколько classов подclassа classа, маскирующихся под интерфейсом одного classа: все они обеспечивают одинаковые функциональные возможности (поскольку они являются подclassами одного и того же classа – в случае NSDictionary, это включает в себя три «примитивных методы “ -count
, -objectForKey:
и -keyEnumerator
), но для разных ситуаций они могут быть эффективными в разных ситуациях, основываясь на том, как они созданы и какие типы данных они могут хранить.
NSCFDictionary – это просто конкретный подclass NSDictionary. То есть ваши NSDictionaries могут фактически быть экземплярами NSCFDictionary, но вы должны рассматривать их как экземпляры NSDictionary, потому что это предоставит вам требуемые функции хранения словаря.
NSDictionary * value = [dict objectForKey: key];
Теперь еще одна причина, по которой ваш код не работает: NSURLProtectionSpace – это class, поэтому вы должны использовать его как указатель, например:
for (NSURLProtectionSpace *key ...
NSCFDictionary является частным подclassом NSDictionary, который реализует фактическую функциональность. Это просто NSDictionary. Почти любой NSDictionary, который вы используете, будет NSCFDictionary под капотом. Для вас это не имеет значения. Вы можете ввести переменную как NSDictionary и использовать ее соответствующим образом.
У меня есть NSCFDictionary, который на самом деле является объектом NSMutableDictionary, я могу удалить из него элементы. Я упоминаю это, чтобы уточнить ответ jtbandes: объектом NSCFDictionary может быть любой объект, который наследуется от NSDictionary.