Как преобразовать NSArray в NSData?
Может кто-нибудь сказать мне, как конвертировать NSArray
для NSData
? у меня есть NSArray
, Мне нужно отправить его NSInputStream
, Для этого мне нужно преобразовать NSArray
для NSData
,
Пожалуйста, помогите мне, я застрял здесь.
8 ответов
Используйте NSKeyedArchiver (который является последним предложением поста ссылки Гарретта):
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];
Обратите внимание, что все объекты в array
должен соответствовать NSCoding
протокол. Если это пользовательские объекты, то это означает, что вам нужно прочитать об объектах кодирования и декодирования.
Обратите внимание, что это создаст довольно трудно читаемый формат списка свойств, но может обрабатывать очень широкий диапазон объектов. Если у вас очень простой массив (например, строки), вы можете использовать NSPropertyListSerialization, который создает немного более простой список свойств:
NSString *error;
NSData *data = [NSPropertyListSerialization dataFromPropertyList:array format:NSPropertyListBinaryFormat_v1_0 errorDescription:&error];
Также есть константа формата XML, которую вы можете передать, если хотите, чтобы ее можно было читать по проводам.
На несколько связанных примечаниях, вот как вы должны преобразовать NSData обратно в NSArray:
NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data]
Я использовал этот код.
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];
Я не уверен, поможет ли это вам, но это ссылка для NSMutableArray на NSData.
Свифт:
let data = NSKeyedArchiver.archivedData(withRootObject: jsonArray)
print(data)
Вы можете сделать это-
NSArray *array= [NSArray array];
NSData *dataArray = [NSKeyedArchiver archivedDataWithRootObject:array];
В iOS 9+ используйте это, пожалуйста:
NSArray *array = [[NSArray alloc] init];
NSData *data = [NSPropertyListSerialization dataWithPropertyList:array format:NSPropertyListBinaryFormat_v1_0 options:0 error:nil];
Старая версия этого устарела в iOS 8.
Свифт 5
let data = try! NSKeyedArchiver.archivedData(withRootObject: array, requiringSecureCoding: true)