2015-03-12 2 views
3

Je me sers stringWithUTF8String pour convertir mon NSData à NSString comme suit:stringWithUTF8String retour nul depuis iOS 8.2 mise à jour

if ([[NSString stringWithUTF8String:[responsedata bytes]] isEqualToString:@"SUCCESS"]){ 
    dostuff... 
} 

Il a été fonctionne très bien; Cependant, depuis la mise à jour iOS 8.2, [[NSString stringWithUTF8String:[responsedata bytes]] a renvoyé zéro.

je résolu le problème en utilisant le code suivant:

NSString *responseDataString = [[NSString alloc] initWithData:responsedata encoding:NSUTF8StringEncoding]; 

if ([responseDataString isEqualToString:@"SUCCESS"]){ 
    dostuff... 
} 

Dans les deux cas responsedata « s Description imprimée était le même: <OS_dispatch_data: data[0x7aeb6500] = { leaf, size = 7, buf = 0x7c390360 }>

Ma question est: Pourquoi le premier zéro de retour d'option, et pourquoi soudainement après la mise à jour iOS 8.2? String_withF8String attend un tampon terminé par NUL, mais votre NSData n'est pas terminé par NUL.

+0

Semble à moi comme un bug, je vous suggère de soumettre un rapport de bug avec Apple – rckoenes

Répondre

3

Dans votre exemple, votre NSData contient 7 octets, et la valeur attendue est également de 7 caractères. Cela peut fonctionner de temps en temps quand il se trouve un NUL suivant la mémoire dans votre NSData, mais cela ne fonctionnera souvent pas. Le seul moyen sûr de convertir un NSData non-NUL terminé est également de dire à NSString la longueur de votre tampon, comme vous le faites dans votre solution.

+0

Merci d'avoir expliqué! Donc, ce n'est pas forcément un problème avec iOS 8.2, mais j'étais plutôt 'chanceux' que cela fonctionnait auparavant ... – Stephan