NSArray'i NSData'ya nasıl dönüştürebilirim?


82

Herkes nasıl bir dönüştürmek için bana söyleyebilir NSArraybir etmek NSData? Bir NSArray. Onu bir NSInputStream. Bunu yapmak NSArrayiçin bir NSData.

Lütfen bana yardım et, burada sıkışıp kaldım.

Yanıtlar:


190

NSKeyedArchiver'ı kullanın (Garrett bağlantılarının son cümlesi):

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];

İçindeki tüm nesnelerin protokole arrayuyması gerektiğini unutmayın NSCoding. Bunlar özel nesnelerse, bu, Kodlama ve Kod Çözme Nesnelerini okumanız gerektiği anlamına gelir .

Bunun okunması oldukça zor bir özellik listesi biçimi oluşturacağını, ancak çok çeşitli nesneleri işleyebileceğini unutmayın. Çok basit bir diziniz varsa (örneğin dizeler), biraz daha basit bir özellik listesi oluşturan NSPropertyListSerialization'ı kullanmak isteyebilirsiniz:

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

Ayrıca, kablo üzerinde okunabilir olmasını tercih ederseniz, geçirebileceğiniz bir XML format sabiti de vardır.


93

Biraz ilgili bir notta, NSData'yı NSArray'e nasıl geri dönüştürebileceğinizi aşağıda bulabilirsiniz:

NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data]

5
Bunun NSKeyedArchiver değil, NSKeyedUnarchiver olduğundan emin olun. Otomatik tamamlamayı kullanırken yapılması kolay bir hata olabilir.
Sean

2
Yukarıdan seçilen cevapla birleştirilen bu cevap, uyumlu herhangi bir nesneyi NSData'ya / NSData'dan arşivlemek / arşivden çıkarmak için yeterli olmalıdır
Scott D


3

Bu kodu kullandım.

 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

Bunu yapabilirsiniz-

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

1

İOS 9+ için lütfen şunu kullanın:

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

Bunun eski sürümü iOS 8'de kullanımdan kaldırıldı.


1

Swift:

let data = NSKeyedArchiver.archivedData(withRootObject: jsonArray)
print(data)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.