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.

78
demandé sur Kuldeep 2009-08-17 08:56:22

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.

187
répondu Rob Napier 2018-02-15 07:12:54

Sur une note quelque peu liée, voici comment vous convertiriez le NSData en NSArray:

NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data]
92
répondu Michael Thiel 2011-02-23 16:34:14

Je ne suis pas sûr si cela vous aidera, mais c'est un lien pour un NSMutableArray vers NSData.

3
répondu Garrett 2009-08-17 05:01:12

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];
3
répondu Avijit Nagare 2016-01-07 13:53:59

, Vous pouvez le faire-

NSArray *array= [NSArray array];
NSData *dataArray = [NSKeyedArchiver archivedDataWithRootObject:array];
1
répondu Nitesh 2015-02-12 11:57:26

Swift:

let data = NSKeyedArchiver.archivedData(withRootObject: jsonArray)
print(data)
1
répondu ioopl 2017-12-23 22:28:33

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.

0
répondu NeilNie 2016-02-27 20:36:12