Comment convertir NSArray en NSData?
Quelqu'un peut-il me dire comment convertir un NSArray
en un NSData
? J'ai un NSArray
. Je dois l'Envoyer à un NSInputStream
. Pour ce faire, j'ai besoin de convertir le NSArray
en NSData
.
Aidez-moi, je suis coincé ici.
7 réponses
Utilisez NSKeyedArchiver (qui est la dernière phrase des liens Post Garrett):
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];
Notez que tous les objets de array
doivent être conformes au protocole NSCoding
. Si ce sont des objets personnalisés, cela signifie que vous devez lire sur Les objets D'encodage et de décodage .
Notez que cela va créer un format de liste de propriétés assez difficile à lire, mais peut gérer un très large éventail d'objets. Si vous avez un tableau très simple (chaînes par exemple), vous pouvez utiliser NSPropertyListSerialization, qui crée une liste de propriétés un peu plus simple:
NSString *error;
NSData *data = [NSPropertyListSerialization dataFromPropertyList:array format:NSPropertyListBinaryFormat_v1_0 errorDescription:&error];
Il y a aussi une constante de format XML que vous pouvez passer si vous préférez qu'elle soit lisible sur le fil.
Sur une note quelque peu liée, voici comment vous convertiriez le NSData en NSArray:
NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data]
Je ne suis pas sûr si cela vous aidera, mais c'est un lien pour un NSMutableArray vers NSData.
J'ai utilisé ce code.
NSError *error;
NSMutableData *jsonData = [[NSJSONSerialization dataWithJSONObject:yourDemoArray
options:0 // Pass 0 if you don't care about the readability of the generated string
error:&error] copy];
, Vous pouvez le faire-
NSArray *array= [NSArray array];
NSData *dataArray = [NSKeyedArchiver archivedDataWithRootObject:array];
Swift:
let data = NSKeyedArchiver.archivedData(withRootObject: jsonArray)
print(data)
Dans iOS 9 + Utilisez ceci svp:
NSArray *array = [[NSArray alloc] init];
NSData *data = [NSPropertyListSerialization dataWithPropertyList:array format:NSPropertyListBinaryFormat_v1_0 options:0 error:nil];
L'ancienne version de ceci était obsolète dans iOS 8.