J'aimerais itérer via un CFdictionary (CFPropertylist) et obtenez toutes les valeurs sur un niveau spécifique.
Ce serait mon dictionnaire / liste de propriétés: p> Utiliser objc, il ressemblerait à quelque chose comme ceci: p> et imprimerait une liste des touches de la console comme ceci: p>
A
B
C
3 Réponses :
Basé sur le code de Seemelyfriends :
CFDictionaryRef dict = CFDictionaryCreate(...) size size = CFDictionaryGetCount(dict); CFTypeRef *keysTypeRef = (CFTypeRef *) malloc( size * sizeof(CFTypeRef) ); CFDictionaryGetKeysAndValues(dict, (const void **) keysTypeRef, NULL); const void **keys = (const void **) keysTypeRef;
Merci un tas - qui a fait le travail.
La méthode CFDictionaryGetKeSandvaluesSandvalues prend un pointeur sur un pointeur sur un tableau des clés. Pourquoi, alors, ne passez-vous pas l'adresse du pointeur "KeyStypeef" (qui serait un pointeur sur ce pointeur)?
CFDictionaryGetKetkeysandvalues Code> prend un pointeur AA sur un tableau de pointeurs (
Void ** code>), pas un pointeur sur un pointeur sur un tableau de pointeurs (
Void *** code>). N'oubliez pas que
cftyperef code> est un pointeur.
Pouvez-vous développer? Ce lien est en panne.
Voir la réponse de KennyTM, qui est une approche plus facile que de le faire à la main.
Si vous ne voulez pas seulement imprimer les valeurs (ou les imprimer plus agréables), vous devrez peut-être rechercher le type de chaque propriété. Un exemple de cela est dans Stackoverflow.com/a/17981965/1904815 .
Utiliser CFDictionaryApplyfunction code> Pour itérer via un dictionnaire.
static void printKeys (const void* key, const void* value, void* context) {
CFShow(key);
}
...
CFDictionaryApplyFunction(dict, printKeys, NULL);
D'accord. Une excellente approche pour une grande variété de problèmes.
CFCOPYDescription est utile lors du débogage ...
CFCopyDescription Returns a textual description of a Core Foundation object. CFStringRef CFCopyDescription ( CFTypeRef cf );