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.
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.
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.
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]
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.
Bạn có thể làm được việc này-
NSArray *array= [NSArray array];
NSData *dataArray = [NSKeyedArchiver archivedDataWithRootObject:array];
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];
Swift:
let data = NSKeyedArchiver.archivedData(withRootObject: jsonArray)
print(data)
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.