2009-08-17 11 views
75

Czy ktoś może mi powiedzieć, jak przekonwertować NSArray na NSData? Mam NSArray. Muszę wysłać go do NSInputStream. W tym celu muszę przekonwertować NSArray na NSData. Proszę, pomóż mi, utknąłem tutaj.Jak przekonwertować NSArray na NSData?

Odpowiedz

183

Zastosowanie NSKeyedArchiver (co jest ostatnie zdanie postu linki Garrett):

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array]; 

pamiętać, że wszystkie obiekty w array muszą być zgodne z protokołem NSCoding. Jeśli są to obiekty niestandardowe, oznacza to, że musisz przeczytać na Encoding and Decoding Objects.

Należy zauważyć, że stworzy to dość trudny do odczytania format listy właściwości, ale może obsłużyć bardzo szeroki zakres obiektów. Jeśli masz bardzo prostą tablicę (łańcuchy na przykład), może chcesz używać NSPropertyListSerialization, który tworzy się nieco prostsze listy właściwość:

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

Jest też format XML stałe można przejść, jeśli wolisz to być czytelne na drucie.

+0

+1 za najlepszą odpowiedź i wielkie dzięki. – Shivaay

91

na nieco powiązana uwaga, oto jak można przekonwertować NSData powrotem do NSArray:

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

Upewnij się, że jest to NSKeyedUnarchiver, a nie NSKeyedArchiver. Może być łatwym błędem przy korzystaniu z autouzupełniania. – Sean

+2

Ta odpowiedź, w połączeniu z wybraną odpowiedzią z powyższego, powinna wystarczyć do archiwizowania/cofnięcia archiwizacji dowolnego zgodnego obiektu do/z NSData –

1

Można zrobić this-

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

użyłem tego kodu.

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

W iOS 9+ skorzystać z tej Proszę:

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

Im starsza wersja ta została zaniechana w iOS 8.

0

SWIFT:

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