2009-12-17 3 views
0

Je souhaite connaître le type de données que j'envoie via une fonction d'envoi via GameKit. Fondamentalement, je stocke ces données dans CFPropertyListRef. dataReceived est de type NSMutatableData.De toute façon, pour connaître la classe associée à cette variable?

- (void) receiveData:(NSMutableData *)data fromPeer:(NSString *)peer inSession: (GKSession *)session context:(void *)context { 
    // Read the bytes in data and perform an application-specific action. 
    [dataReceived setData:data]; 

if([dataReceived length]> 0) { 
    CFStringRef errorString; 
    CFPropertyListRef plist = CFPropertyListCreateFromXMLData(kCFAllocatorDefault, (CFDataRef)dataReceived, kCFPropertyListMutableContainers, &errorString); 
    } 

Mon but est de savoir si plist est de type NSDictionary, étant donné que je voudrais traiter que les données de façon appropriée

Répondre

2

Vous pouvez utiliser CFGetTypeID() pour cela:

if(CFDictionaryGetTypeID() == CFGetTypeID(plist)) 
    // do something 

Si vous préférez Objective-C, jetez un oeil à NSPropertyListSerialization.

0

Vous pouvez le faire, mais cela ne veut pas dire que vous devriez - une liste de propriétés peut avoir un dictionnaire ou un tableau comme élément de premier niveau. Que voulez-vous spécial-cas un dictionnaire pour?

+0

Je veux faire la différence entre une chaîne et nsdictionary qu'elle reçoit dans cette méthode. donc je peux stocker le NSDictionary et non la chaîne que je reçois. c'est principalement pour le processus de validation – Frank

+0

Je dirais que le contenu des données devrait être connu compte tenu du contexte. Il semble que ce soit les données que vous envoyez - vous pourriez peut-être envisager de faire de l'objet de premier niveau toujours un dictionnaire avec une clé 'content' pour les données du tableau/dictionnaire, puis une autre clé (par exemple, 'name') quel genre d'information est transmis. –

Questions connexes