82 votes

Comment convertir NSArray en NSData ?

Quelqu'un peut-il me dire comment convertir un NSArray à un NSData ? J'ai un NSArray . Je dois l'envoyer à un NSInputStream . Pour ce faire, je dois convertir l'adresse de l'utilisateur en une adresse électronique. NSArray à un NSData .

S'il vous plaît, aidez-moi, je suis coincé ici.

192voto

Rob Napier Points 92148

Utilisez NSKeyedArchiver (qui est la dernière phrase de l'article auquel Garrett renvoie) :

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];

Notez que tous les objets dans array doit être conforme à la NSCoding protocole. S'il s'agit d'objets personnalisés, cela signifie que vous avez besoin de lire sur Encodage et décodage d'objets .

Notez que cela créera un format de liste de propriétés assez difficile à lire, mais peut gérer une très large gamme d'objets. Si vous avez un tableau très simple (des 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 existe également une constante de format XML que vous pouvez transmettre si vous préférez qu'elle soit lisible sur le fil.

94voto

Michael Thiel Points 1279

Dans un autre ordre d'idées, voici comment reconvertir la NSData en NSArray :

NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data]

5 votes

Assurez-vous que c'est bien NSKeyedUnarchiver et non NSKeyedArchiver. Il s'agit d'une erreur facile à commettre lorsque vous utilisez la fonction de complétion automatique.

2 votes

Cette réponse, associée à la réponse choisie ci-dessus, devrait être suffisante pour archiver/désarchiver tout objet compatible vers/depuis NSData.

3voto

Garrett Points 4295

Je ne sais pas si cela vous aidera, mais il s'agit d'un lien pour une NSMutableArray vers NSData .

0 votes

Merci pour la réponse rapide, j'ai déjà vérifié cela avant, mais cela n'a pas aidé.

3voto

Avijit Nagare Points 1514

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];

2voto

ioopl Points 1377

Swift :

let data = NSKeyedArchiver.archivedData(withRootObject: jsonArray)
print(data)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X