2009-08-17 40 views
75

Bất cứ ai có thể cho tôi biết làm thế nào để chuyển đổi một NSArray thành 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 thành một NSData. Xin hãy giúp tôi, tôi bị kẹt ở đây.Làm thế nào để chuyển đổi NSArray sang NSData?

Trả lời

183

Sử dụng NSKeyedArchiver (đó là câu cuối cùng của bài viết 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 giao thức NSCoding. Nếu đây là các đối tượng tùy chỉnh, thì điều đó có nghĩa là bạn cần phải đọc lên trên Encoding and Decoding Objects.

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ý phạm vi đối tượng rất rộng. Nếu bạn có một mảng rất đơn giản (chuỗi chẳng hạn), bạn có thể muốn sử dụng NSPropertyListSerialization, mà tạo ra một chút danh sách tài sản đơn giản:

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

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

+0

+1 để có câu trả lời hay nhất và cảm ơn rất nhiều. – Shivaay

3

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 to NSData.

+0

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

91

Trên một lưu ý phần nào liên quan, dưới đây là cách bạn có thể chuyển đổi các NSData lại một NSArray:

NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data] 
+5

Đả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

+2

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 –

1

Bạn có thể làm this-

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

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

Trong iOS 9 + sử dụng này xin vui lòng:

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

Các phiên bản cũ của này đã bị phản đối trong iOS 8.

0

Swift:

let data = NSKeyedArchiver.archivedData(withRootObject: jsonArray) 
print(data) 
Các vấn đề liên quan