Как преобразовать NSArray в NSData?

Может ли кто-нибудь сказать мне, как преобразовать NSArray в NSData? У меня есть NSArray. Мне нужно отправить его в NSInputStream. Для этого мне нужно преобразовать NSArray в NSData. Пожалуйста, помогите мне, я застрял здесь.

Ответ 1

Используйте NSKeyedArchiver (последнее предложение ссылок Post Garrett):

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];

Обратите внимание, что все объекты в array должны соответствовать протоколу NSCoding. Если это пользовательские объекты, значит, вам нужно читать Объекты кодирования и декодирования.

Обратите внимание, что это создаст довольно трудно читаемый формат списка свойств, но может обрабатывать очень широкий диапазон объектов. Если у вас очень простой массив (например, строки), вы можете использовать NSPropertyListSerialization, который создает немного более простой список свойств:

NSString *error;
NSData *data = [NSPropertyListSerialization dataFromPropertyList:array format:NSPropertyListBinaryFormat_v1_0 errorDescription:&error];

Также существует константа формата XML, которую вы можете передать, если хотите, чтобы ее можно было прочитать на проводе.

Ответ 2

В некоторой части примечания, здесь, как вы преобразовали NSData обратно в NSArray:

NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data]

Ответ 3

Я не уверен, поможет ли это вам, но это ссылка для NSMutableArray в NSData.

Ответ 4

Вы можете сделать это -

NSArray *array= [NSArray array];
NSData *dataArray = [NSKeyedArchiver archivedDataWithRootObject:array];

Ответ 5

Я использовал этот код.

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

Ответ 6

В iOS 9+ используйте это, пожалуйста:

NSArray *array = [[NSArray alloc] init];
NSData *data = [NSPropertyListSerialization dataWithPropertyList:array format:NSPropertyListBinaryFormat_v1_0 options:0 error:nil];

Более старая версия этого устарела в iOS 8.

Ответ 7

Swift:

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