Câu hỏi Làm thế nào để chuyển đổi NSArray sang NSData?


Bất cứ ai có thể cho tôi biết làm thế nào để chuyển đổi một NSArray đến một NSData? tôi có một NSArray. Tôi cần gửi nó đến NSInputStream. Để làm điều đó tôi cần phải chuyển đổi NSArray đến một NSData.

Xin hãy giúp tôi, tôi bị kẹt ở đây.


75
2017-08-17 04:56


gốc




Các câu trả lời:


Sử dụng NSKeyedArchiver (đó là câu cuối cùng của bài liên kết Garrett):

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];

Lưu ý rằng tất cả các đối tượng trong array phải phù hợp với NSCoding giao thức. Nếu đây là các đối tượng tùy chỉnh, thì điều đó có nghĩa là bạn cần đọc lên Mã hóa và giải mã các đối tượng.

Lưu ý rằng điều này sẽ tạo ra một định dạng danh sách thuộc tính khá khó đọc, nhưng có thể xử lý rất nhiều đối tượng. Nếu bạn có một mảng rất đơn giản (ví dụ như chuỗi), bạn có thể muốn sử dụng NSPropertyListSerialization, tạo ra một danh sách thuộc tính đơn giản hơn một chút:

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

Ngoài ra còn có một hằng số định dạng XML mà bạn có thể vượt qua nếu bạn muốn nó có thể đọc được trên dây.


186
2017-08-17 05:20



1 cho câu trả lời tốt nhất và cảm ơn rất nhiều. - Shivaay


Trên một lưu ý hơi liên quan, đây là cách bạn sẽ chuyển đổi NSData trở lại NSArray:

NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data]

92
2018-02-23 16:34



Đảm bảo rằng đó là NSKeyedUnarchiver chứ không phải NSKeyedArchiver. Có thể là một sai lầm dễ dàng khi thực hiện khi sử dụng tính năng tự động hoàn tất. - Sean
Câu trả lời này, cùng với câu trả lời đã chọn từ trên phải đủ để lưu trữ / hủy lưu trữ bất kỳ đối tượng tương thích nào đến / từ NSData - Scott D


Tôi không chắc chắn nếu điều này sẽ giúp bạn, nhưng nó là một liên kết cho một NSMutableArray đến NSData.


3
2017-08-17 05:01



Cảm ơn bạn đã trả lời nhanh chóng, tôi đã kiểm tra trước khi didnt giúp đỡ nhiều. - satish


Bạn có thể làm được việc này-

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

1
2018-02-12 11:57





Tôi đã sử dụng mã này.

 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





Trong iOS 9+, hãy sử dụng tính năng này:

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

Phiên bản cũ hơn của phiên bản này đã không được chấp nhận trong iOS 8.


0
2018-02-27 20:36