Pertanyaan Bagaimana cara mengubah NSArray ke NSData?


Adakah yang bisa memberitahu saya bagaimana mengkonversi NSArray ke sebuah NSData? Saya punya NSArray. Saya harus mengirimkannya ke NSInputStream. Untuk melakukan itu saya perlu mengkonversi NSArray ke sebuah NSData.

Tolong bantu saya, saya terjebak di sini.


75
2017-08-17 04:56


asal


Jawaban:


Gunakan NSKeyedArchiver (yang merupakan kalimat terakhir dari tautan pasca Garrett):

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];

Perhatikan bahwa semua objek dalam array harus sesuai dengan NSCoding protokol. Jika ini adalah objek khusus, maka itu berarti Anda perlu membaca terus Pengkodean dan Pengkodean Objek.

Perhatikan bahwa ini akan membuat format daftar properti yang cukup sulit dibaca, tetapi dapat menangani berbagai objek yang sangat luas. Jika Anda memiliki array yang sangat sederhana (string misalnya), Anda mungkin ingin menggunakan NSPropertyListSerialization, yang membuat daftar properti yang sedikit lebih sederhana:

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

Ada juga konstanta format XML yang dapat Anda lewati jika Anda lebih suka dapat dibaca pada kabel.


186
2017-08-17 05:20



Pada catatan yang agak terkait, berikut ini cara Anda mengonversi NSData kembali ke NSArray:

NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data]

92
2018-02-23 16:34



Saya tidak yakin apakah ini akan membantu Anda, tetapi itu tautan untuk a NSMutableArray ke NSData.


3
2017-08-17 05:01



Kamu bisa melakukan ini-

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

1
2018-02-12 11:57



Saya menggunakan kode ini.

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

1
2018-01-07 13:53



Swift:

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

1
2017-12-23 22:28



Di iOS 9+ gunakan ini, silakan:

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

Versi yang lebih lama ini sudah ditinggalkan di iOS 8.


0
2018-02-27 20:36